Angular 8延迟加载的路线和后卫

时间:2019-06-18 13:59:46

标签: angular angular8

我正在尝试新的Angular 8,并且正在更新旧的Angular 6项目。

要启用延迟模块加载,而不是将所有路由都放在项目根目录中的单个app-routing.module.ts中,而是将它们移动到具有相关模块的特定文件夹中。例如

user (folder)
-----> user.module.ts
-----> detail (folder)
      -----> detail.component.ts
      -----> detail.component.html

和app-routing.module.ts中,我将路由懒加载为:

{
    path: 'user',
    loadChildren: () => import('./user/user.module').then(m => m.UserModule)
}

在user.module.ts内部,我将路由声明为:

const userRoutes = RouterModule.forChild([
    {
        path: '',
        component: UserComponent,
        canActivateChild: [AuthGuard],
        children: [
            {
                path: 'detail',
                component: UserDetailComponent
            }
        ]
    },
    ...
]);

现在是问题:可以通过AuthGuard激活子级,该子级会检查用户是否已通过身份验证。 用户身份验证位于服务(AuthService)上,属性 isAuthenticated 是主题,因此,每次登录时我都会这样做

this.isAuthenticated.next(true)

反之亦然,当我注销时

this.isAuthenticated.next(false)

我第一次登录时,一切正常。如果我注销并再次登录,即使登录成功,我也会重定向到登录页面。

事实上,如果我在Auth Guard中订阅

this.authService.isAuthenticated.subscribe(console.log)

我第一次在控制台中看到登录时输出“ true”,注销时显示“ false”。当我再次尝试登录时,不会触发此订阅。

我怀疑罪魁祸首是用户模块的延迟加载。

不用说,它在Angular 6上有效。

谢谢!

1 个答案:

答案 0 :(得分:0)

我该死。

为了开始铺设模块,我遵循了本指南

https://angular.io/guide/lazy-loading-ngmodules

但是我忘了最后导出RouterModule。现在一切正常。