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