代码之家  ›  专栏  ›  技术社区  ›  user1589188

创建可观察角度的过滤对象

  •  0
  • user1589188  · 技术社区  · 8 年前

    嗨,我有个私人的 Subject 我不想暴露,所以我创造了不同的 Observable S单曲 主题 :

    public numberChange$: Observable<number>;
    public oddChange$: Observable<number>;
    public evenChange$: Observable<number>;
    private number: Subject<number>;
    constructor() {
      this.number = new Subject<number>();
      this.numberChange$ = this.number.asObservable();
      this.oddChange$ = this.number.filter(n => n % 2 === 1).asObservable();
      this.evenChange$ = this.number.filter(n => n % 2 === 0).asObservable();
    }
    

    以便其他人可以订阅 numberChange$ 如果他们想知道号码什么时候变了。如果他们只想知道更改是奇数时,他们可以订阅 oddChange$ . 同样的道理 evenChange$ .

    上面的代码不起作用,因为在 this.number.filter() 我不能打电话 asObservable() 不再。如何修复上面的代码以实现我所描述的内容?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Joshua Chan    8 年前

    Observable 从返回 Observable.filter . 所以没必要打电话 asObservable() ,只订阅返回的值。

    this.number = new Subject<number>();
    this.numberChange$ = this.number.asObservable();
    this.oddChange$ = this.number.filter(n => n % 2 === 1);
    this.evenChange$ = this.number.filter(n => n % 2 === 0);
    this.oddChange$.subscribe((x) => { console.log(x) } );