在我的SharedModule
内,我想将相关的代码片段分成多个子模块。但是,当我这样做时,会丢失共享模块中的通用导入。例如,我在FormsModule
之前导入SharedChildModule
,但是当我尝试在SharedChildModule
中使用ngModel时,它告诉我ngModel
不可用。
SharedModule
继承模块吗?
当我将ChildSharedModule
中的组件和指令直接包含在SharedModule
中时,没有任何问题。只有当我尝试将其移动到子模块然后将整个模块导入SharedModule
时,我才会收到错误。
@NgModule({
declarations: [],
exports: [
CommonModule,
FormsModule,
ChildSharedModule
],
imports: [
CommonModule,
FormsModule,
ChildSharedModule
]
})
export class SharedModule { }
@NgModule({
declarations: [
ChildValidatorDirective,
ChildControlComponent
],
exports: [
ChildValidatorDirective,
ChildControlComponent
]
})
export class SharedChildModule {}
答案 0 :(得分:0)
您不能向下推模块的 依赖关系,但是可以向上导出模块。
@NgModule({
declarations: [],
exports: [
ChildSharedModule
],
imports: [
ChildSharedModule
]
})
export class SharedModule { }
@NgModule({
imports: [
CommonModule,
FormsModule
],
declarations: [
ChildValidatorDirective,
ChildControlComponent
],
exports: [
ChildValidatorDirective,
ChildControlComponent,
CommonModule,
FormsModule
]
})
export class SharedChildModule {}
现在SharedModule
将导入SharedChildModule
,并将接收该子模块导出的所有内容。由于SharedModule
也正在导出SharedChildModule
,因此导入它的父母也将收到CommonModule
和FormsModule
。
您基本上是在断摇树,这使得单元测试非常困难。
Angular将不再能够删除未使用的模块,因为您将所有内容耦合在一起。从FormsModule
中删除SharedChildModule
也将变得困难,因为您将不知道有多少父母依靠它。
您应该尽量将模块保持为 singular 和 flat ,并使每个模块仅导入其特别需要的内容。
当使用者不知道其他模块是必需的时,您可以导出另一个模块。