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

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

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

最佳答案

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

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

导入仅适用于 NgModule ,不适用于组件或指令。
因此该行无效

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

应该像

进口:[Feature1Module,Feature2Module]

关于angular - 了解@NgModule 的用法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39713306/

10-11 07:06