2017-04-09 62 views
0

我在延遲加載模塊中路由時遇到問題。延遲加載嵌套模塊和路由

這裏是我的「根」的路線:

const routes: Routes = [ 
    {path: '', redirectTo: 'admin', pathMatch: 'full' }, 
    {path: 'admin', loadChildren: 'app/admin.module#AdminModule'} 
]; 

@NgModule({ 
    imports: [ 
     RouterModule.forRoot(routes) 
    ], 
    exports: [ 
     RouterModule 
    ] 
}) 
export class MainRoutingModule {} 

所以我從我的應用程序期望,是空的路徑重定向到/admin - 這工作正常,模塊被加載。

在AdminModule

我有另外一個重定向:

const routes: Routes = [ 
    {path: '', component: AdminComponent, children: [ 
     {path: '', redirectTo: 'app', pathMatch: 'full' }, 
     {path: 'app', loadChildren: './app/app.module#AppModule', canActivate: [ AuthGuard ] }, 
     {path: 'login', component: LoginComponent} 
    ]}, 
]; 

@NgModule({ 
    imports: [ 
     RouterModule.forChild(routes), 
     AppModule 
    ], 
    exports: [ 
     RouterModule 
    ] 
}) 
export class AdminRoutingModule {} 

這裏我有兩個方案:

  • 如果用戶進行身份驗證重定向到app - 因此整個路徑是/admin/app
  • 否則重定向到login - 所以整個路徑應該是/admin/login

終於在管理應用程序的路由:

const routes: Routes = [ 
    { path: '', component: AppComponent, children: [ 
    { path: '', redirectTo: 'home', pathMatch: 'full' }, 
    { path: 'home', component: HomeComponent}, 
    ]} 
]; 

現在的問題開始。如果我將以url localhost:3000/admin/app/(*)的身份進入我的身邊,一切都按預期工作,AuthGuard會被調用,url可以,如果用戶未經身份驗證,他會重定向到登錄頁面。

但是!如果我將輸入localhost:3000應用程序將我重定向到localhost:3000/admin/home(缺少app)並且未調用AuthGuard。它看起來像Angular正在省略admin-routing.module並直接轉到最後一個。

是什麼原因?我該如何解決這個問題?

回答

0

在AdminModule中您可以在默認路由中添加canActivate。

const routes: Routes = [ 
    {path: '', component: AdminComponent, children: [ 
     {path: '', redirectTo: 'app', pathMatch: 'full' canActivate: [ AuthGuard ]}, 
     {path: 'app', loadChildren: './app/app.module#AppModule', canActivate: [ AuthGuard ] }, 
     {path: 'login', component: LoginComponent} 
    ]}, 
]; 
相關問題