看看你所有的路线。
appRoutes = [ // AppModule
{ path: '', redirectTo: 'dashaboard' },
{ path: 'dashboard', component: DashboardComponent
];
benutzerRoutes = [ // BenutzerModule
{ path: 'benutzer/:id', component BenutzerComponent }
];
klientRoutes = [ // KlinetModule
{ path: 'klient/:id', component: KlientComponent }
]
导入模块的方式对构建路由的方式没有任何影响。它们是如何构建的只是基于我们如何构建。您对此有何期待
AppModule
imports -> BenutzerModule
imports -> KlinetModule
通往以下路线
dashboard/benutzer/:id/klient/:id
事实并非如此。这些路由数组中的每一个都只是简单地添加到根。这就是为什么您可以访问klient/:id
而不是dashboard/benutzer/:id
.
我已经阅读了几次完整的路由文档,并且没有任何不同模块中嵌套路由的示例。所有示例都有从根路由加载的模块,就像您的示例一样,或者嵌套路由是同一路由配置的一部分。因此,由于没有示例,我想我们只需要使用我们所知道的并自己决定什么是最好的方法。
我能想到几种方法。第一个,最明显但 IMO 比下一个选项更具侵入性,就是将完整路线添加到路径
appRoutes = [ // AppModule
{ path: '', redirectTo: 'dashaboard' },
{ path: 'dashboard', component: DashboardComponent
];
benutzerRoutes = [ // BenutzerModule
{ path: 'dashboard/benutzer/:id', component BenutzerComponent }
];
klientRoutes = [ // KlinetModule
{ path: 'dashboard/benutzer/:id/klient/:id', component: KlientComponent }
]
我说这个选项更具侵入性,因为它迫使孩子们了解父母。在 Angular 2 架构中,这与我们构建组件的方式背道而驰。父母应该了解孩子,但不一定相反。
我能想到的另一个选择是用于loadChildren
延迟加载子模块。我说“懒惰”是因为我不知道如何急切地做到这一点,甚至不确定是否有可能这样做。懒惰地加载孩子,我们可以做
export const appRoutes: Routes = [
{ path: '', redirectTo: 'dashboard', pathMatch: 'full' },
{ path: 'dashboard', component: DashboardComponent },
{
path: 'dashboard/benutzer',
loadChildren: 'app/benutzer/benutzer.module#BenutzerModule'
},
{ path: '**', component: NotFoundComponent }
];
export const benutzerRoutes: Routes = [
{ path: ':id', component: BenutzerComponent },
{
path: ':id/klient',
loadChildren: 'app/klienten/klienten.module#KlientenModule'
}
];
export const klientenRoutes: Routes = [
{ path: ':id', component: KlientComponent }
];
在这种情况下,我们将从其 parent 中删除所有子模块导入@NgModule
。这允许延迟加载模块。如果我们离开,那么模块将在启动时急切地加载,但没有达到预期的效果(因此我说我不是如何急切地这样做)。
还要注意loadChildren
. 在上面的示例中,我app
用作根。唯一的原因是我在本地环境中测试过。我不是 Plunker 的忠实粉丝。但是,对于您的 Plunker,您应该使用src
root。
IMO,延迟加载看起来更干净,因为孩子不知道父级,但这会迫使您延迟加载模块,这可能是不希望的。但在某些情况下,这是需要的,因为它允许更轻的初始负载。
有关延迟加载的更多信息,请参阅异步路由的文档路由部分