阅读through this article并使用以下CanActivate
检查来查看是否允许用户导航到主页:
canActivate(): Observable<boolean> {
return this.authQuery.isLoggedIn$.pipe(
take(1),
switchMap((isLoggedIn) => {
if (!isLoggedIn) {
this.router.navigate(['/login']);
}
return of(isLoggedIn);
})
);
我想知道take(1)
的目的是什么?由于isLoggedIn$
是Observable<boolean>
的实例,因此似乎总是只有1个?
答案 0 :(得分:1)
是的,只需要一次读取快照即可。
在canActivate
的情况下,这是一个问题,因为您不订阅,是否需要它,因此angular会处理可释放的资源,因为您返回的是可观察的。所以在这种情况下我不会使用take
take
非常重要,如果您要订阅,以便在不需要可观察物时停止收听