理解@NgModule 的用法

Understanding @NgModule usage

这个新的@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 {}

现在,在 "convenience" 的幌子下,我现在似乎必须声明一个 @NgModule,其中所有四个组件都在一个数组中,如下所示:

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

这不会掩盖我的组件的真实依赖关系图吗?如果我这样做,我怎么知道实际上是 Cmp3 依赖于 Cmp1?哦,当然,我在这里和那里省略了一些导入语句,但似乎成本正在失去每个组件的显式依赖性。

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

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

的确,您不再获得组件或指令的清晰依赖关系图,但是如果您将应用程序拆分为每个 NgModule 的功能,您将获得清晰的功能依赖关系图,恕我直言有意义。

导入仅适用于 NgModules,不适用于组件或指令。 因此这一行无效

进口:[Cmp1、Cmp2、Cmp3、Cmp4]

并且应该像

导入:[Feature1Module,Feature2Module]