在Angular中创建过滤的Observable主题

时间:2018-05-23 01:40:42

标签: angular rxjs observable behaviorsubject

您好我有一个我不想公开的私人Subject,所以我从单Observable创建了不同的Subject

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 个答案:

答案 0 :(得分:2)

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) } );