您好我有一个我不想公开的私人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()
了。你如何修复上面的代码来实现我所描述的?
答案 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) } );