Angular 路由守卫未呼叫 return
Angular route guard not calling return
我有一个授权 class 设置如下:
export class AuthService {
user = new Subject<string>();
login(name: string) {
this.user.next(name);
}
}
我设置了一个 auth guard 来检查我的用户主题是否有这样的值:
export class AuthGuard implements CanActivate {
constructor(private authService: AuthService, private router: Router) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
return this.authService.user
.pipe(
map(user => {
const isAuth = !!user;
if (isAuth) {
return true;
}
return this.router.createUrlTree(['/login']);
})
);
}
}
我将打印语句放在 return 中,但它们从未被调用过。该页面从不加载,也从不重定向。如果我只是 return true 或 false 它有效但是通过 returning 我的 authService.user 似乎什么都没有发生。
您当前代码的明显问题是,在您的守卫中订阅时,您的应用程序的任何部分都没有将任何数据推送到 user subject
。
如何使用 BehaviorSubect
以便在您订阅它时接受一个值?使用 BehaviorSubect
除非你向它推入一个新值,否则你将在订阅它时立即接受初始值。
export class AuthService {
user = new BehaviorSubject<string>(null);
login(name: string) {
this.user.next(name);
}
}
我有一个授权 class 设置如下:
export class AuthService {
user = new Subject<string>();
login(name: string) {
this.user.next(name);
}
}
我设置了一个 auth guard 来检查我的用户主题是否有这样的值:
export class AuthGuard implements CanActivate {
constructor(private authService: AuthService, private router: Router) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
return this.authService.user
.pipe(
map(user => {
const isAuth = !!user;
if (isAuth) {
return true;
}
return this.router.createUrlTree(['/login']);
})
);
}
}
我将打印语句放在 return 中,但它们从未被调用过。该页面从不加载,也从不重定向。如果我只是 return true 或 false 它有效但是通过 returning 我的 authService.user 似乎什么都没有发生。
您当前代码的明显问题是,在您的守卫中订阅时,您的应用程序的任何部分都没有将任何数据推送到 user subject
。
如何使用 BehaviorSubect
以便在您订阅它时接受一个值?使用 BehaviorSubect
除非你向它推入一个新值,否则你将在订阅它时立即接受初始值。
export class AuthService {
user = new BehaviorSubject<string>(null);
login(name: string) {
this.user.next(name);
}
}