最近我达到了这个要求,我在3个不同的for循环中订阅了3次可观察的次数。
我每次都获取更新的数据。 每次我们订阅可观察的角度数据时,如何获取旧数据?
答案 0 :(得分:0)
您可以为此使用服务属性或组件属性。
如果您想将数据保留在组件本地,请使用一个属性,并在 next 回调中继续将接收到的数据推送到该属性中。另一方面,如果您想与其他组件进行共享数据/逻辑,则可以采用与推送数据相同的方法来使用服务,而只是将服务注入到要使用它的其他组件中。(不要忘记使用同一服务实例)
Services
答案 1 :(得分:0)
您将需要自己跟踪旧值,因为Angular没有提供获取这些旧值的方法。这是一些示例代码,显示了执行此操作的一种方法。
@Component(...)
export class SomeComponent {
constructor(private dataService){ }
private oldData;
ngOnInit(){
this.dataService.getSomeData().subscribe((data)=>{
if(this.oldData){
//do stuff with old data.
//Not available until the SECOND time this callback is called
}
this.oldData = data;
//do stuff with new data
});
}
}
答案 2 :(得分:0)
您可以使用ReplaySubject来“重放”或向新订阅者发出旧值:
Subject的一种变体,可以“重播”或将旧值发出给新 订阅者。它缓冲一定数量的值并将发出这些值 除了发射新的订户外,还立即向任何新订户定价 现有订户的价值。
import * as Rx from "rxjs";
const subject = new Rx.ReplaySubject(2);
// subscriber 1
subject.subscribe((data) => {
console.log('Subscriber A:', data);
});
subject.next(Math.random())
subject.next(Math.random())
subject.next(Math.random())
// subscriber 2
subject.subscribe((data) => {
console.log('Subscriber B:', data);
});
subject.next(Math.random());
// Subscriber A: 0.3541746356538569
// Subscriber A: 0.12137498878080955
// Subscriber A: 0.531935186034298
// Subscriber B: 0.12137498878080955
// Subscriber B: 0.531935186034298
// Subscriber A: 0.6664809293975393
// Subscriber B: 0.6664809293975393
代码源:Understanding rxjs BehaviorSubject, ReplaySubject and AsyncSubject