[英]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.