介绍
我正在尝试Angular2+
使用共享服务中的 Observable 创建一个路由保护,该服务包含当前用户角色的字符串值。
问题显然在于将我的想法从 Promise 转移到 Observables。
到目前为止,我所做的是基于启发式和尝试和错误方法,但我通过杀死浏览器撞到了墙解决了感谢 danday74
.
尝试(感谢@danday74 改进)
借助相当于promise.then() 的 RxJS 序列?我已经将我想做的事情翻译成这个链:
canActivate(route: ActivatedRouteSnapshot): Observable<boolean> | boolean {
return this.auth.isRoleAuthenticated(route.data.roles)
.mergeMap((isRoleAuthenticated: boolean) => {
return isRoleAuthenticated ? Observable.of(true) : this.auth.isRole(Roles.DEFAULT_USER);
})
.do((isDefaultUser: boolean) => {
const redirectUrl: string = isDefaultUser ? 'SOMEWHERE' : 'SOMEWHERE_ELSE';
this.router.navigate([redirectUrl]);
})
.map((isDefaultUser: boolean) => {
return false;
});
}
问题
如果 ,如何停止可观察链的进一步传播isRoleAuthenticated = true
?如果满足这样的条件,我需要返回该布尔值,并确保.do
之后不调用操作符块。
限制是必须从canActivate
守卫返回布尔值。