Angular 角度+;离子型2+;ngrx/商店-取消订阅不';行不通
我有一个实现了ngrx/store的ionic2应用程序,我遇到了一个奇怪的行为Angular 角度+;离子型2+;ngrx/商店-取消订阅不';行不通,angular,ionic2,rxjs,observable,ngrx-store,Angular,Ionic2,Rxjs,Observable,Ngrx Store,我有一个实现了ngrx/store的ionic2应用程序,我遇到了一个奇怪的行为 nav:Subscription; ngOnInit(): void { this.nav = this.store.select(fromRoot.getLoginState).subscribe(res => { if(res){ this.navCtrl.setRoot(TabsPage); } }) } ngOnDestroy
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)返回一个布尔值,如果是真的,我想在Ionic 2中将TabsPage设置为root。
显然,我只希望它发生一次,所以我取消了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
可观察的
s,当您不在乎能够在收到结果之前取消订阅时,可以很容易地将其转换为Promise
s来接收这样的单个值
如果您真的只需要一个值,并且不会监视存储的登录状态更新,那么可观察。toPromise
比处理订阅更容易,并且使代码的意图更清晰
下面是您使用toPromise
的示例:
//注意这里没有分配,因为不需要取消订阅
this.store.select(fromRoot.getLoginState.toPromise())
.then(res=>res&&this.navCtrl.setRoot(TabsPage));
这是什么意思ngrx/store-implemented
?我们可以有关于这个的参考url吗?this.store.select(fromRoot.getLoginState)返回特定状态的可观察值,在本例中,它只是一个布尔值