Создать отфильтрованный объект для наблюдаемого в угловых - PullRequest
0 голосов
/ 23 мая 2018

Привет, у меня есть приватный Subject, который я не хочу показывать, поэтому я создаю Observable s из одного 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 голосов
/ 23 мая 2018

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