все ваши маршруты на самом деле находятся на одном уровне.
@NgModule({
imports: [
BalanceModule,
LeavesModule,
RouterModule.forRoot(routes,{ enableTracing: true })
],
exports: [RouterModule]
})
export class AppRoutingModule { }
Ваши три модуля маршрутизации импортированы сюда, и маршрутизатор ищет маршруты последовательно, начиная с первого до последнего.Это означает, что всякий раз, когда маршрутизатор пытается найти соответствие, он ищет маршруты в следующем порядке;1. BalanceRoutinModule 2. LeavesRoutingModule 3. AppRoutingModule
при вводе leaves/balance/casual
маршрутизатор сопоставляет первую часть с path: 'leaves', component: LeavesComponent
в LeavesRoutingModule
и сопоставляет вторую часть с path: 'balance', component: BalanceComponent
снова в LeavesRoutingModule
и при попыткедля сопоставления с третьей частью он не может найти совпадения в LeavesRoutingModule
, поэтому он падает до path: '**', component: PNF404leaveComponent
LeavesRoutingModule
, поскольку BalanceRouting
имеет balance
путь вверху и LeavesRouting
имеет leaves
всверху маршрутизатор пытается сопоставить их с начала пути.так;
в BalanceRoutingModule
изменяя эту строку
path: 'balance', component: BalanceComponent, children: [
на эту
path: 'leaves/balance', component: BalanceComponent, children: [
делает casual
и earned
маршруты работают, но, как вы сказали в комментарии, они отображаются неверно router-outlet
, чтобы они отображались в правильном выводе, тогда связанная с balance
конфигурация должна перейти в LeavesRouting
следующим образом;
const routes: Routes = [
{
path: 'leaves', component: LeavesComponent, children: [
{
path: 'apply', component: ApplyComponent
},
{
path: 'balance', component: BalanceComponent, children: [
{
path: 'casual', component: CasualComponent
},
{
path: 'earned', component: EarnedComponent
},
{
path: '', redirectTo: 'casual', pathMatch: 'full'
},
{ path: '**', component: PNF404balanceComponent }
]
},
{
path: '', redirectTo: 'apply', pathMatch: 'full'
},
{ path: '**', component: PNF404leaveComponent }
]
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class LeavesRoutingModule { }
Вот рабочая демоверсия https://stackblitz.com/edit/angular-nested-routing-with-modules-p96odh
, и это может показаться сложным.и так как вы создали разные модули маршрутизации, я понимаю, что вы хотите делегировать конфигурацию маршрутизации дочерним модулям.в этом случае лучше всего использовать ленивую загрузку следующим образом:
- ленивая загрузка
LeavesModule
in AppRoutingModule
{ path: 'leaves', loadChildren: () => import(`./leaves/leaves.module`).then(m => m.LeavesModule) },
Ленивая нагрузка
BalanceModule
в
LeavesRoutingModule
{ path: 'balance', loadChildren: () => import(`./balance/balance.module`).then(m => m.BalanceModule) },
Вот реализация
https://stackblitz.com/edit/angular-nested-routing-with-modules-v8q9sy