2017-09-13 101 views
0

如果我有一個路由此配置:角2路由總是通過根/

APP-routing.module.ts

const routes: Routes = [ 
    { path: '', loadChildren: './private/private.module#PrivateModule' }, 
    { path: 'login', component: LoginComponent } 
]; 

當我瀏覽到/login懶加載專用模塊將始終加載。最大的問題是如果我有canLoad後衛,以便只有經過身份驗證的用戶才能訪問它。但是,如果我每次去/login時都會通過canLoad後衛重新導向/login,然後再次通過canLoad等等 - 將會創建一個無限循環。任何想法或解決方法。

理想情況下,我想要有一個公共路線/login和一個專用模塊/,它將包含私有模塊以及其中將被加載的共享模塊。我不想在路由上添加任何前綴,這就是爲什麼我要使用根路由/

|_ core 
|_ shared 
|_ login 
|_ private 
|____ shared 
|____ core 
|____ dashboard 
|____ etc 

編輯:

爲了說明這裏是截圖:

enter image description here

當我去登錄,你可以看到0.chunk.js已經加載是專用模塊。在/路線上定義它時不應加載,而我不在/路線上。

+0

那麼你的問題是什麼? –

+0

如果我爲根路徑包含'canLoad'後衛,如何避免無限循環。換句話說,如果我導航到'/ login',如何避免通過定義的根路線? –

+0

請檢查編輯。 –

回答

0

從登錄路線中刪除canActive,並在路由中添加canLoad: [LoginGuard]。由於您的腰部路線是在途中,因此不需要保護。

const routes: Routes = [ 
    { path: '', loadChildren: './private/private.module#PrivateModule', canLoad: [LoginGuard] }, 
    { path: 'login', component: LoginComponent } 
]; 
+0

'LoginGuard'保護已認證的用戶返回'/ login'頁面。延遲加載的模塊也不需要'canActivate'。它應該是'canLoad'。 –

+0

在他的情況下,登錄後衛正在發送到登錄頁面,然後登錄頁面發送到登錄後衛並進入無限循環。所以同樣的事情可以在一個後衛中處理 –

+0

改爲canLoad now –