我有canActivate
方法的警卫:
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
return this.fireAuth.authState.pipe(
take(1),
map(authState => !!authState),
map(auth => !auth ? this.router.navigate(['/']) : true)
)
}
这是可行的,但是我在控制台中遇到打字错误:
auth.guard.ts(20,7)中的错误:错误TS2322:无法将类型'Observable>'分配给类型'boolean | UrlTree |可观察答应。”
我该如何解决?
答案 0 :(得分:0)
请勿使用map()
。您不想更改发射的值。您只想产生副作用。
take(1),
map(authState => !!authState),
tap(auth => {
if (!auth) {
this.router.navigate(['/']);
}
});
或者,如果它使您更容易理解:
take(1),
map(authState => {
if (authState) {
return true;
} else {
this.router.navigate(['/']);
return false;
}
});
或者更好,当路由器必须导航到其他地方时,返回UrlTree而不是导航自己:
take(1),
map(authState => !!authState || this.router.parseUrl('/'))