遅延ロードされたモジュール内のルーティングに問題があります。ネストしたモジュールとルーティングを遅延ロードする
はここに私の「ルート」路線です:
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/home
(app
が不足しています)にアプリがリダイレクトされ、AuthGuardが呼び出されません。 Angularはadmin-routing.module
を省略し、最後のものに直接行くようです。
理由は何ですか?どうすれば修正できますか?