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 {}

看起来像是目录级别的问题。管道比其他节点深一个节点。你试过移动它吗?我不太明白为什么我需要声明一个共享模块。似乎我添加到
应用程序
模块中的任何内容都应该可用于它“下面”的任何内容。。。或者我没有抓住重点?你的解决方案确实有效,尽管我想更好地理解原因:)“似乎我添加到应用模块的任何内容都应该可以用于“它”下面的任何内容”-不。请阅读我答案中的第二句话。非常感谢你的帮助。我需要更彻底地阅读。