Angular 2 Auth Gaurd使用ngrx存储选择。我取消订阅吗?

时间:2017-03-28 16:41:02

标签: angular observable ngrx unsubscribe

我在模板中使用异步管道来获取所有商店选择值,因为它会自行完成所有清理工作,包括取消订阅。

但是当我手动订阅我的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;
    }
}

1 个答案:

答案 0 :(得分:5)

您应该使用take来获取第一个值:

canActivate(){
    this.store.select(getLoggedInState).take(1).subscribe(res => {
        if(res){
            return true
        }else {
           c this.router.navigate(['/login']);
        }
    });
        return false;
    }
}

take(n)使observable获取它收到的第一个n值,然后完成。在这种情况下,您无需取消订阅。