Angular 2在高级模块中找不到声明
我有一个嵌套的模块结构,按功能组织:Angular 2在高级模块中找不到声明,angular,Angular,我有一个嵌套的模块结构,按功能组织: /app /lib (not a module) /pipes capitalize.pipe.ts /portal /dashboard /public 每个模块都有自己的延迟加载路由。以下是我的应用程序、门户和仪表板路线,为简洁起见省略了导入: **app.routing.ts** export const appRouting: ModuleWithProviders = RouterModule.forRoo
/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中添加声明,比如capitalippe
,它在延迟加载的模块中不可用。它将仅在应用程序组件级别工作
我收到:
Template Error: The pipe 'capitalize' could not be found
例如,如果我尝试在dashboard.component.html中实现管道
我的期望是,如果我添加一个“应用程序级别”声明,它将可用于低于该级别的任何模块
我做错了什么
我看到的问题是,如果我向app.module.ts添加声明(如CapitalizePipe),它在延迟加载的模块中不可用
无论模块是否延迟加载,对于模块都是如此@NgModule.declarations
(即组件、指令和管道)的作用域是声明它们的模块(除非该模块导出它们,否则它们可以在导入此模块的其他模块中使用)
如果您有应该共享的声明,建议在共享模块中声明和导出它们,并将该共享模块导入到您希望在其中使用项的任何模块中
@NgModule({
declarations: [ CapitalizePipe, otherStuff ],
exports: [ CapitalizePipe, otherStuff ]
})
class SharedModule {}
@NgModule({
imports: [ SharedModule ]
declarations: [ ComponentThatUsesCapitlizePipe ],
exports: [ ComponentThatUsesCapitlizePipe ]
})
class OtherModule {}
看起来像是目录级别的问题。管道比其他节点深一个节点。你试过移动它吗?我不太明白为什么我需要声明一个共享模块。似乎我添加到
应用程序模块中的任何内容都应该可用于它“下面”的任何内容。。。或者我没有抓住重点?你的解决方案确实有效,尽管我想更好地理解原因:)“似乎我添加到应用模块的任何内容都应该可以用于“它”下面的任何内容”-不。请阅读我答案中的第二句话。非常感谢你的帮助。我需要更彻底地阅读。