ионные угловые подписчики не обновляются - PullRequest
0 голосов
/ 25 апреля 2019

Как отразить изменения наблюдаемого на другой странице.

У меня есть две страницы, Page1 и Page2, подписанные на одну и ту же наблюдаемую.

В Page1 я подписался на нее на ionViewDidLoad ()

  ionViewDidLoad() {
    this.basket.getBasket().subscribe(res => {
      this.basketDraft = res;
    });
  }

in 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 Ответ

2 голосов
/ 25 апреля 2019

Неправильно, как вы создаете свой Observable.Каждый раз, когда вы делаете subscribe(), вы переопределяете observer, поэтому в итоге вы получаете только одну подписку.Вместо этого используйте Subjects.

В вашем Basket.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)
}
...