我有一个包含一些路由的模块:
export const routes: Routes = [
{
path: '/some-util-path',
component: SomeUtilComponent
}
];
@NgModule({
imports: [
CommonModule,
FormsModule,
RouterModule.forRoot(routes)
],
declarations: [
// --- some components ---
],
providers: [
// --- some services ---
],
exports: [
// --- some exports ---
],
})
export class MyUtilModule {
}
当我在app.module(根模块)中导入此模块时,此方法工作正常,但是当我(同样)在延迟加载的模块中导入时,我得到
Error: RouterModule.forRoot() called twice.
Lazy loaded modules should use RouterModule.forChild() instead.
如何配置此实用程序模块以根据其用例将路由加载为forRoot和forChild?
我想我可以将路由和“ SomeUtilComponent”拆分到另一个仅在app.module中加载的模块,但是我有兴趣知道是否仅使用一个模块和条件逻辑就可以。
我正在阅读静态的forRoot和forChild方法,但是我不知道如何安排导入,因为您只能指定提供程序。
答案 0 :(得分:0)
您好,我认为您需要export const routing: ModuleWithProviders = RouterModule.forChild(routes);
才能使此处的路由有效,这是一个示例:
const routes: Routes = [{ path: '', component: LazyComponent }];
export const routing: ModuleWithProviders = RouterModule.forChild(routes);
,然后在您的延迟加载模块中执行下一步:
@NgModule({
imports: [routing],
declarations: [LazyComponent]
})
export class LazyModule {}
这是一篇文章: Lazy Loading a Module
来自Angular IO concerning lazy loading:
您可能已经注意到CLI将RouterModule.forRoot(routes)添加到app-routing.module.ts导入数组中。这使Angular知道该模块AppRoutingModule是路由模块,而forRoot()指定这是根路由模块。它配置您传递给它的所有路由,使您可以访问路由器指令,并注册RouterService。在AppRoutingModule中使用forRoot(),即在根级别在应用程序中使用一次。 CLI还将RouterModule.forChild(routes)添加到功能路由模块。这样,Angular知道路由列表仅负责提供其他路由,并且用于功能模块。您可以在多个模块中使用forChild()。