我有一个嵌套的模块结构,按特性组织:
/app
/lib (not a module)
/pipes
capitalize.pipe.ts
/portal
/dashboard
/public每个模块都有自己的延迟加载路由。下面是我的应用程序、门户和仪表板路线,为了简洁起见,省略了导入:
**app.routing.ts**
export const appRouting: ModuleWithProviders = RouterModule.forRoot([
{
path: 'portal',
loadChildren: () => require('es6-promise!./portal/portal.module')('PortalModule')
},
{
path: '',
loadChildren: () => require('es6-promise!./public/public.module')('PublicModule')
}
])
**portal.routing.ts**
export const portalRouting: ModuleWithProviders = RouterModule.forChild([
{
path: 'portal',
component: PortalComponent,
children: [
{
path: 'dashboard',
loadChildren: () => require('es6-promise!./dashboard/dashboard.module')('DashboardModule')
},
],
canActivate: [AuthenticationRequired]
}
]);
**dashboard.routing.ts**
export const dashboardRouting: ModuleWithProviders = RouterModule.forChild([
{
path: '',
component: DashboardComponent
}
]);我看到的问题是,如果我将声明添加到我的app.module.ts中,比如CapitalizePipe,那么它在延迟加载的模块中是不可用的。它将只在应用程序组件级别工作。
我收到:
Template Error: The pipe 'capitalize' could not be found例如,如果我试图在dashboard.component.html中实现管道。
这是我的期望,如果我添加一个“应用级”声明,它将提供给任何模块以下。
我做错了什么?
发布于 2016-10-25 18:12:47
我看到的问题是,如果我将一个声明添加到我的app.module.ts中,比如CapitalizePipe,它在惰性加载模块中是不可用的
无论模块是否是延迟加载的,模块都是如此。@NgModule.declaratations (即组件、指令和管道)的作用域为声明它们的模块(除非该模块导出它们,否则它们可以用于导入该模块的其他模块)。
如果您有应该共享的声明,建议在共享模块中声明并导出这些声明,并将该共享模块导入您想要使用的任何模块中。
@NgModule({
declarations: [ CapitalizePipe, otherStuff ],
exports: [ CapitalizePipe, otherStuff ]
})
class SharedModule {}
@NgModule({
imports: [ SharedModule ]
declarations: [ ComponentThatUsesCapitlizePipe ],
exports: [ ComponentThatUsesCapitlizePipe ]
})
class OtherModule {}https://stackoverflow.com/questions/40246672
复制相似问题