如何在另一个页面上反映可观察对象的变化。
我有两个页面,Page1和Page2订阅了相同的Observable。
在 Page1 中,我在ionViewDidLoad()上订阅了它
ionViewDidLoad() {
this.basket.getBasket().subscribe(res => {
this.basketDraft = res;
});
}
在 Page2 中,我进行了新的网络通话,这将更新购物篮。 但是当我返回到Page1时,未调用已订阅的块,并且视图也未更新。页面是否应在观察数据时更新?
Basket.ts
constructor(){
//create an observable
this.basketObservable = Observable.create(observer => {
this._basketObserver = observer;
});
}
//return the observables
getBasket() {
return this.basketObservable;
}
//publish to all subscribers
update(_basketDraft:any){
this._basketObserver.next(_basketDraft)
}
如何确保Page2中的更改也会更新Page1?
答案 0 :(得分:2)
创建Observable的方式不正确。每次执行subscribe()
时,您都会覆盖observer
,因此最终您只能获得一个订阅。请改用Subjects
。
在您的购物篮中。ts中的代码如下:
private _basketObserver = new Subject()
public basketObservable = this._basketObserver.asObservable();
constructor() {}
//return the observable
getBasket() {
return this.basketObservable;
}
//publish to all subscribers
update(_basketDraft:any){
this._basketObserver.next(_basketDraft)
}