繁体   English   中英

Angular 路由保护不调用返回

[英]Angular route guard not calling return

我有一个 auth class 设置如下:

export class AuthService {
  user = new Subject<string>();

  login(name: string) {
    this.user.next(name);
  }

}

我设置了一个身份验证保护来检查我的用户主题是否具有如下值:

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']);
        })
      );
  }
}

我将打印语句放在返回中,它们永远不会被调用。 该页面永远不会加载,也永远不会重定向。 如果我只返回 true 或 false 它可以工作,但是通过返回我的 authService.user 似乎什么都没有发生。

您当前代码的明显问题是,当您订阅它时,您的应用程序的任何部分都不会将任何数据推送到user subject中。

如何使用BehaviorSubect以便在您订阅它时接受一个值? 使用BehaviorSubect除非您将新值推入其中,否则您将在订阅时立即接受初始值。

export class AuthService {
   user = new BehaviorSubject<string>(null);

   login(name: string) {
     this.user.next(name);
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM