Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何知道是否设置了可观察的变化值或最终值_Angular_Typescript_Observable_Angular7_Angular Observable - Fatal编程技术网

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只会发出一个值,因此您的问题很难理解:永远不会有下一个日期。退一步,解释一下你想要实现的目标。因此,我有一个对象,其中包含一些带有日期属性的项。我列出了它们,并通过观察得到了日期。在刷新页面时,或者如果您更改了此对象的日期,我想知道哪个对象的日期已从上一个可观察调用更改。所以,也许映射它们并进行比较或其他什么,我尝试使用订阅者,但不确定如何知道哪个订阅者更改了日期。