我正在尝试理解如何动态添加从延迟加载模块中的路由。 我有核心应用程序,并具有以下路由:
export const routes = [{
path: "",
component: HomeComponent
}, {
path: "moduleA",
loadChildren: "app/moduleA/A.module"
}];
在A.module中,我从"local"模块的moduleA.routes.config.ts导入路由。
const routes = [{
path: "",
component: ModuleAHomeComponent,
children: [
{ path: "", component: ModuleAListComponent },
{ path: ":id", component: ModuleADetailComponent }
]
}];
export const routing = RouterModule.forChild(routes);
到目前为止一切都很好。现在,在ModuleADetailComponent中,我有一个“附加模块”的列表,我将其称为我的Web应用程序的插件,它们是分别开发的,我希望能够在ModuleADetailComponent页面中显示。 因此,这个组件的模板大致如下:
<div *ngFor="let plugin of plugins">
<div class="header">{{ plugin.name }}</div>
<router-outlet name="*plugin.name*">*LOAD MODULE HERE*</router-outlet>
</div>
当然,插件是在导航到ModuleADetailComponent时加载的配置,因此我无法预先知道配置了哪些模块以及它们的数量。 最后,这些插件中的每一个都可以是一个NgModule(在工作台环境中单独开发)。
我需要的是:如何动态修改路由器配置,以将子项添加到moduleA.routes.config.ts中定义的路由中? 例如,如果我有2个插件,我希望使用router.resetConfig来动态地获得与moduleA.routes.config.ts相同的效果。
const routes = [{
path: "",
component: ModuleAHomeComponent,
children: [
{ path: "", component: ModuleAListComponent },
{
path: ":id",
component: ModuleADetailComponent,
children: [
{
path: "plugin1",
loadChildren: "app/plugins/plugin1.module",
outlet: "plugin1"
},
{
path: "plugin2",
loadChildren: "app/plugins/plugin2.module",
outlet: "plugin2"
}
]
}
]
}];
export const routing = RouterModule.forChild(routes);
我希望我能实现它,否则插件将不得不在没有路由的情况下开发...但它们可以成为大的子模块,从中受益。
编辑 27/09/2016:我已经组装了这个 plunkr:http://plnkr.co/edit/6aV5n5K5wdqdiYo49lZv。 目前我能做到的是动态加载组件并将它们添加到应用程序中(请查看“Dynamic Modules”选项卡)。 我还使用了多个命名路由出口,尽管没有找到任何官方文档(请查看“Dynamic Routed”选项卡)。尽管选项卡名称如此,但路由在提前知道。
我的目标是:动态加载配置(DynamicRoutesComponent 中的 dynamicRoutes 数组),并在每个动态路由上创建一个路由器出口,并使用 resetConfig(或其他必要方法)来获得此配置:
{
path: "dynamic-routed",
component: DynamicRoutesComponent,
children: [
{ path: "", component: EmptyComponent },
{ path: "component1", component: Component1, outlet: "component1" },
{ path: "component2", component: Component2, outlet: "component2" }
]
}
每个动态路由只对应一个子页面。
提前感谢您!