我正在使用CanLoad通过Guard保护惰性模块。
我正在恢复ngrx存储的状态,并检查用户是否已通过身份验证。
这是我的auth-guard.service.ts中的代码:
canLoad() {
return this.store.pipe(
select('auth'),
take(1),
map(
(authState: fromAuth.State) => {
if (authState.authenticated) {
return true;
} else {
this.router.navigate(['/auth/signin']);
return false;
}
}
))
}
此代码正常。所有工作都按预期进行。
但是问题是...为什么我需要使用take(1)才能使它起作用?如果我取走take(1),则此后卫无法正常工作。
答案 0 :(得分:1)
它只能与take(1)一起使用,因为此时没有可观察的对象将不会完成,并且canLoad会等到可观察的对象完成。
请参阅http://reactivex.io/documentation/operators/take.html,汇整将从源头构建一个新的可观察汇整x个项目,完成后将忽略其他项目。