Angular 如何知道是否设置了可观察的变化值或最终值
我有一个类型为Angular 如何知道是否设置了可观察的变化值或最终值,angular,typescript,observable,angular7,angular-observable,Angular,Typescript,Observable,Angular7,Angular Observable,我有一个类型为returnDate:Observable的变量,它的值是从另一个类型为Observable的函数设置的,看起来像: getDates(): Observable<string> { return new Observable((observer) => { observer.next(moment(this.data.Date).format('DD MMM'));} }); } getDates():可观察{ 返回新的可观察对象((观察
returnDate:Observable
的变量,它的值是从另一个类型为Observable的函数设置的,看起来像:
getDates(): Observable<string> {
return new Observable((observer) => {
observer.next(moment(this.data.Date).format('DD MMM'));}
});
}
getDates():可观察{
返回新的可观察对象((观察者)=>{
observer.next(矩(this.data.Date).format('DD-MMM');}
});
}
现在,我如何检测或知道returnDate值是否已更改,或者可观察对象是否已收到另一个值。
基本上,我是在用这个可观测值更改日期,所以我需要知道特定对象(this.data.Date)的给定值是否已更改(observer.next)已完成,或者可能有一个辅助函数,如用于观察对象的final/finalaize。尽管从您共享的代码中很难理解您是如何做到这一点的。但就你的问题而言—— 所以我需要知道一个特定对象(this.data.Date)的 值已更改 对于rxjs观测值,有一个运算符distinctUntilChanged,其用途完全相同。阅读 仅当当前值与上一个值不同时发射 样品溶液
getDates.pipe(distinctUntilChanged())
.subscribe(data => console.log("This will only hit if data changed"));
看看这是否对你有效。如果你每次都返回一个
新的可观察对象()
在订阅的地方,你会得到不同的值,例如,你返回一个返回新的可观察对象(Math.random()*10)
并且你订阅了两个组件,你会得到不同的值,但我认为你需要得到相同的值,因此,对于这种情况,请使用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,因为它可以保存值,也可以设置主题的初始值
如果您有更多问题,请随时提问。查看此项:
complete
可能是您需要的。也许我把这个问题说得不好,但基本上我需要比较observer接收到的async的第一个值,看看它是否与下一个值不同。我不知道类型空洞的Obrver。完全()函数是如何帮助这个的。也许你应该考虑使用A。我假设你知道某个地方的数据或日期发生了变化。对于主题,您可以在数据更改时运行next或complete。然后,订阅该主题的任何组件都将知道。至于将一个日期与另一个日期进行比较,在调用getDates
函数时,必须将值保存在变量中,并检查它们是否不同。@user4005469您的observable只会发出一个值,因此您的问题很难理解:永远不会有下一个日期。退一步,解释一下你想要实现的目标。因此,我有一个对象,其中包含一些带有日期属性的项。我列出了它们,并通过观察得到了日期。在刷新页面时,或者如果您更改了此对象的日期,我想知道哪个对象的日期已从上一个可观察调用更改。所以,也许映射它们并进行比较或其他什么,我尝试使用订阅者,但不确定如何知道哪个订阅者更改了日期。