离子角度订户未更新

时间:2019-04-25 06:24:04

标签: angular ionic-framework ionic2 rxjs ionic3

如何在另一个页面上反映可观察对象的变化。

我有两个页面,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?

1 个答案:

答案 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)
}