2017-04-09 13 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 {} 

ここで私は2つのシナリオだ:ユーザが認証されている場合

  • 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はOKです。ユーザーが認証されていない場合は、ログインページにリダイレクトされます。

しかし!localhost:3000を入力すると、localhost:3000/admin/homeappが不足しています)にアプリがリダイレクトされ、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} 
    ]}, 
]; 
関連する問題