阅读本文,它使用以下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可以取?
是的,它只需要一次,就像读取快照一样。
在canActivate
的这种情况下,如果您需要它,这是一个问题,因为您没有订阅,所以angular将处理释放资源,因为您正在返回observable。所以我不会在这种情况下使用
如果你订阅了take
,那么当你不需要它们的时候,你就不再监听它们了