在 Angular 中创建过滤的 Subject to Observable

Create filtered Subject to Observable in Angular

您好,我有一个我不想公开的私人 Subject,所以我从单个 Subject:

创建了不同的 Observable
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()。你如何修复上面的代码以实现我所描述的?

Observable.filter 返回一个 Observable。所以不需要调用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) } );