理解@NgModule的用法



这个新的@NgModule的垃圾把我难住了。以前,我能够通过@Component元对象的directives: []属性清楚地指定@Component的指令依赖关系。所以:

@Component({ /* ... */ })
export class Cmp1 {}
@Component({ /* ... */ })
export class Cmp2 {}
@Component({
  /* ... */
  directives: [Cmp1]
})
export class Cmp3 {}
@Component({
  /* ... */
  directives: [Cmp2, Cmp3]
})
export class Cmp4 {}

现在,在"方便"的幌子下,似乎我现在必须声明一个@NgModule,把这四个组件都放在一个数组中,像这样:

@NgModule({
  declarations: [Cmp1, Cmp2, Cmp3, Cmp4],
  exports: [Cmp4],
  imports: [Cmp1, Cmp2, Cmp3, Cmp4]
})
export class YetAnotherWrapperClass {}

这会不会模糊我的组件的真正依赖关系图?如果我这样做了,我怎么知道实际上是Cmp3依赖于Cmp1呢?哦,当然,我可以在这里和那里省略一些import语句,但似乎代价是失去了每个组件的显式依赖关系。

我通读了迁移指南和angular模块指南,但我觉得好像我根本不同意@NgModule的设计决定。我错过什么了吗?

引入@NgModule()的目的是允许路由器延迟加载,而不是引入一种声明组件依赖的不同方式。这只是一个副作用。

这是真的,你没有得到一个清晰的组件或指令的依赖关系图,但你得到一个清晰的功能依赖关系图,如果你把你的应用程序拆分到每个NgModule的一个功能,这是更有意义的。

Imports只适用于NgModule,不适用于组件或指令。因此,这一行是无效的

imports: [Cmp1, Cmp2, Cmp3, Cmp4]

和应该像

imports: [Feature1Module, Feature2Module]

最新更新