[英]Create filtered Subject to Observable in Angular
Hi I have a private Subject
that I do not want to expose, so I am creating different Observable
s from the single Subject
: 嗨,我有一个我不想公开的私有
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();
}
So that others can subscribe to numberChange$
if they want to know when the number has changed. 这样其他人可以在想知道号码何时更改的情况下订阅
numberChange$
。 If they want to know ONLY when the change is an odd number, they can subscribe to oddChange$
. 如果他们只想知道更改是什么时候是奇数,则可以订阅
oddChange$
。 Same goes for evenChange$
. evenChange$
。
The code above does not work because after this.number.filter()
I cannot call asObservable()
anymore. 上面的代码不起作用,因为在
this.number.filter()
我无法再调用asObservable()
。 How do you fix the code above to achieve what I have described? 您如何解决上面的代码以实现我所描述的内容?
An Observable
is returned from Observable.filter
. Observable
返回一个Observable.filter
。 So there isn't a need to call asObservable()
, just subscribe to the returned value. 因此,无需调用
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) } );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.