簡體   English   中英

Angular 8懶加載路線和守衛

[英]Angular 8 lazy loaded routes and guards

我只是嘗試新的Angular 8而且我正在更新一個古老的角度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是Subject,所以每次登錄時我都會

this.isAuthenticated.next(true)

當我退出時,反之亦然

this.isAuthenticated.next(false)

我第一次登錄時,每個人都可以正常工作。 如果我退出並再次登錄,即使登錄成功,我也會被重定向到登錄頁面。

事實上,如果我在Auth Guard中訂閱了

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

我第一次在控制台中看到登錄時輸出“true”,當我退出時輸出“false”。 當我嘗試再次登錄時,不會觸發此訂閱。

我懷疑這是用戶模塊的延遲加載的罪魁禍首。

不用說,在Angular 6上它起作用了。

謝謝!

我可能該被詛咒。

為了進行模塊加載,我遵循了本指南

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

但我忘了最后導出RouterModule。 現在一切都很完美。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM