理解@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
的功能,您将获得清晰的功能依赖关系图,恕我直言有意义。
导入仅适用于 NgModule
s,不适用于组件或指令。
因此这一行无效
进口:[Cmp1、Cmp2、Cmp3、Cmp4]
并且应该像
导入:[Feature1Module,Feature2Module]
这个新的@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
的功能,您将获得清晰的功能依赖关系图,恕我直言有意义。
导入仅适用于 NgModule
s,不适用于组件或指令。
因此这一行无效
进口:[Cmp1、Cmp2、Cmp3、Cmp4]
并且应该像
导入:[Feature1Module,Feature2Module]