Angular 2 使用 ngrx 商店验证 Gaurd select。我要退订吗?
Angular 2 Auth Gaurd using ngrx store select. Do i unsubscribe?
我在我的模板中使用异步管道存储所有 select 值,因为它会自行完成所有清理工作,包括取消订阅。
但是当我在我的 auth gaurd 中手动订阅一个值时,我需要取消订阅吗?如果是,那么最好的方法是什么?
@Injectable()
export class AuthGaurd implements CanActivate{
constructor(
private store: Store<fromRoot.State>,
private router: Router
){}
canActivate(){
this.store.select(getLoggedInState).subscribe(res => {
if(res){
return true
}else {
this.router.navigate(['/login']);
}
});
return false;
}
}
您应该使用 take
来获取第一个值:
canActivate(){
this.store.select(getLoggedInState).take(1).subscribe(res => {
if(res){
return true
}else {
c this.router.navigate(['/login']);
}
});
return false;
}
}
take(n)
使可观察对象获取它接收到的第一个 n
值,然后完成。在这种情况下,您无需退订。
我在我的模板中使用异步管道存储所有 select 值,因为它会自行完成所有清理工作,包括取消订阅。
但是当我在我的 auth gaurd 中手动订阅一个值时,我需要取消订阅吗?如果是,那么最好的方法是什么?
@Injectable()
export class AuthGaurd implements CanActivate{
constructor(
private store: Store<fromRoot.State>,
private router: Router
){}
canActivate(){
this.store.select(getLoggedInState).subscribe(res => {
if(res){
return true
}else {
this.router.navigate(['/login']);
}
});
return false;
}
}
您应该使用 take
来获取第一个值:
canActivate(){
this.store.select(getLoggedInState).take(1).subscribe(res => {
if(res){
return true
}else {
c this.router.navigate(['/login']);
}
});
return false;
}
}
take(n)
使可观察对象获取它接收到的第一个 n
值,然后完成。在这种情况下,您无需退订。