angular + Ionic 2 + ngrx/store - 退订无效
angular + Ionic 2 + ngrx/store - unsubscribe doesn't work
我有一个实现了 ngrx/store 的 ionic2 应用程序,但我遇到了一个奇怪的行为。
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) returns 一个布尔值,如果它是真的,我想在 Ionic 2 中将 TabsPage 设置为根。
显然我只希望它发生一次所以我在 onDestroy 生命周期挂钩中取消订阅。
然而,取消订阅似乎不起作用,每次我获得状态更改时,它都会将视图设置回 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();
}
ngrx
使用 rxjs
Observable
s,当你不在乎是否能够时,它可以很容易地转换为 Promise
s 来接收像这样的单个值在收到结果之前取消订阅。
如果您真的只想要一个值并且不会监视商店的登录状态更新,那么 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));
我有一个实现了 ngrx/store 的 ionic2 应用程序,但我遇到了一个奇怪的行为。
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) returns 一个布尔值,如果它是真的,我想在 Ionic 2 中将 TabsPage 设置为根。 显然我只希望它发生一次所以我在 onDestroy 生命周期挂钩中取消订阅。
然而,取消订阅似乎不起作用,每次我获得状态更改时,它都会将视图设置回 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();
}
ngrx
使用 rxjs
Observable
s,当你不在乎是否能够时,它可以很容易地转换为 Promise
s 来接收像这样的单个值在收到结果之前取消订阅。
如果您真的只想要一个值并且不会监视商店的登录状态更新,那么 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));