4

这个新的@NgModule 废话让我很难过。之前,我可以通过元对象的属性明确地指定 a@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?哦,当然,我可以在这里和那里省略一些导入语句,但似乎代价是失去每个组件的显式依赖关系。

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

4

1 回答 1

2

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

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

Imports 仅适用于NgModules,不适用于组件或指令。因此,该行无效

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

应该像

进口:[Feature1Module,Feature2Module]

于 2016-09-27T05:42:02.583 回答