我有一个有角度的2路由器防护,其canActivate
方法定义如下:
canActivate() {
return this.sessionSigninService.isAuthenticated()
.filter(isAuthenticated => isAuthenticated !== null)
.map(isAuthenticated => {
if (isAuthenticated) {
return true;
}
this.router.navigate(['/signin']);
return false;
});
}
来自sessionSigninService
:
isAuthenticated(): Observable<boolean> {
return this.store.select(fromRoot.getAuthenticated);
}
仅供参考,fromRoot.getAuthenticated
初始化为null
当canActivate
方法被调用且null
的{{1}}值进入isAuthenticated
运算符时,filter()
似乎会阻塞filter()
isAuthenticated
更改为false
或true
。
请注意,这是所需的行为,但我不理解......
有人可以解释一下这种行为吗?
答案 0 :(得分:1)
与Array.prototype.filter()类似,只有在传递标准函数时才会从源中发出值。
filter
只会在过滤方法的返回值为true
时传播数据 - 当您有isAuthenticated: null
并评估null !== null
时 - &gt;它将返回false
,这就是为什么没有传播数据而且不会调用map
的原因。
只要您isAuthenticated: true|false
,过滤器就会评估为true
,因为true
和false
都是!== null
,并传播数据。< / p>