我有一个类型为returnDate: Observable<string>
的变量,其值是从Observable类型的另一个函数设置的,它看起来像:
getDates(): Observable<string> {
return new Observable((observer) => {
observer.next(moment(this.data.Date).format('DD MMM'));}
});
}
现在我如何检测或知道returnDate值是否已更改或者observable是否已收到另一个值。基本上我用这个observable更改日期所以我需要知道一个特定的对象(this.data.Date),如果给定的值已经改变(observer.next)已经完成,或者可能有一个辅助函数,如final / finalaize对于观察者。
虽然从代码中难以理解,但您分享了您是如何做到这一点的。但就你的问题而言 -
所以如果给定的值已经改变,我需要知道一个特定的对象(this.data.Date)
在rxjs observables的情况下,有一个运算符distinctUntilChanged用于完全相同的目的。阅读here。
仅在当前值与最后一个值不同时才发出。
一个示例解决方案
getDates.pipe(distinctUntilChanged())
.subscribe(data => console.log("This will only hit if data changed"));
看看它是否适合你。
如果你每次都返回一个你订阅的new Observable()
,你将获得不同的值,例如你返回一个return new Observable(Math.random()*10)
,你订阅了2个组件,你将获得不同的值,但我认为你需要获得相同的值,所以对于这个场景使用Subject()
首先,您必须声明它然后设置值然后返回this.subject.asObservable()
这使您有机会订阅此主题。
简单的例子
// set initial value to subject, ussualy set data above constructor
dataSubject = new BehaviorSubject(null);
// then you get data from server
// response can be data from serve or data from eventEmitter whatever you need
this.dataSubject.next(response);
// then return this subject
return this.dataSubject.asObservable()
在这种情况下,使用BehaviorSubject因为它可以保存值,您也可以设置主题的初始值
如果您有更多问题,请随时提出。