2017-03-25 11 views
0

私はngrx/storeを実装したionic2アプリを持っていて、私は奇妙な動作に遭遇しています。angle + Ionic 2 + ngrx/store - unsubscribeは機能しません。

nav:Subscription; 

ngOnInit(): void { 
    this.nav = this.store.select(fromRoot.getLoginState).subscribe(res => { 
     if(res){ 
      this.navCtrl.setRoot(TabsPage); 
     } 
    }) 
} 

ngOnDestroy(): void { 
    this.nav.unsubscribe() 
} 

store.select(fromRoot.getLoginState)もちろん、私は唯一の私はonDestroyライフサイクルフックに退会ので、それは一度起こるしたいブール値を返し、それが本当なら、私はイオン2 にrootとしてTabsPageを設定したいです。

しかし退会が動作するようには思えないと私は状態変化を取得するたびに、それが戻ってTabspageにビューを設定し(そう、サブスクリプションがまだ発射)

任意のアイデア?

this.nav = this.store.select(fromRoot.getLoginState).subscribe(res => { 
     if(res){ 
      this.navCtrl.setRoot(TabsPage); 
     } 
     //condition to check the required data is available 
     this.nav.unsubscribe(); 
} 
+0

あなたはこの 'ngrx /ストアimplemented'によって何を意味するのですか?それについての参考URLはありますか? – Sampath

+0

https://github.com/ngrx/store this.store.select(fromRoot.getLoginState)特定の状態のオブザーバブルを返します。この場合は単なるブール値です –

答えて

1

結果を受け取る前に加入を取り消すことができる介護者。

真に唯一の値を必要とし、ログイン状態の更新のために店舗を監視しない場合、Observable.toPromiseは購読を乱用するよりも簡単で、コードの意図をより明確にします。ここで

toPromiseを使用して、あなたの例です:

// notice no assignment here, since no need to unsubscribe 
this.store.select(fromRoot.getLoginState).toPromise() 
    .then(res => res && this.navCtrl.setRoot(TabsPage)); 
0

ngrxはあなたがいない時に簡単にこのように単一の値を受信するためのPromise秒に変換することができrxjsObservable Sを、使用してサブスクリプション内でそれを退会しなければならない

乾杯

関連する問題