canLoad不会阻止组件加载

时间:2019-04-17 05:33:02

标签: angular angular2-routing

我有一个Angular应用,其中的路由实现了canLoad: [AuthGuard], 并且canLoad像这样在我的AuthGuard类中:

    canLoad(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): 
    boolean 
   {
     if (this.authService.isLogged || this.authService.checkLoggedIn()) 
     {
      return true;
     } else
     {
        this.router.navigate(['/login']);
        return 
     } 
   }

如果我尝试在未登录的情况下访问我的任何路由,则由于该路由的组件仍在运行NgOnInit()而没有任何路由信息的情况下不断出现错误,因此最终我将不带参数地进行API调用。但是,页面始终导航到/login

我尚不清楚AuthGuard的工作方式,但是我在canLoad()函数上设置了断点,并且它们从未触发过。我在这里做错什么了吗?

这是有问题的根路由:

{
    path: '',
    component: MydocsComponent,
    canLoad: [AuthGuard],
    children: [...]
}

编辑:我已经意识到这是我的this.authService.checkLoggedIn()方法的问题-也就是说,它将在AuthGuard检查之前将用户重定向到/login,所以这是我的问题。感谢您的协助,希望以下答案对使用canLoad的人有所帮助。

1 个答案:

答案 0 :(得分:1)

canLoadlazily-loaded模块一起使用,以防止条件失败时加载块。如果要限制对组件的访问,请使用canActivate保护。

选中此summary