Javascript 将共享模块拆分为多个子模块

Javascript 将共享模块拆分为多个子模块,javascript,angular,Javascript,Angular,在我的SharedModule中,我想将相关的代码片段分割成多个子模块。但是,当我这样做时,我会丢失来自共享模块的公共导入。例如,我在我的SharedChildModule之前导入FormsModule,但是当我尝试在我的SharedChildModule中使用ngModel时,它告诉我,ngModel不可用。是否可以在共享模块中包含子模块,也可以让这些模块从SharedModule继承模块 当我将ChildSharedModule中的组件和指令直接包含在SharedModule中时,我没有任何

在我的
SharedModule
中,我想将相关的代码片段分割成多个子模块。但是,当我这样做时,我会丢失来自共享模块的公共导入。例如,我在我的
SharedChildModule
之前导入
FormsModule
,但是当我尝试在我的
SharedChildModule
中使用ngModel时,它告诉我,
ngModel
不可用。是否可以在共享模块中包含子模块,也可以让这些模块从
SharedModule
继承模块

当我将
ChildSharedModule
中的组件和指令直接包含在
SharedModule
中时,我没有任何问题。只有当我尝试将它们移动到子模块中,然后将整个模块导入到
SharedModule
中时,才会出现错误

@NgModule({
声明:[],
出口:[
公共模块,
FormsModule,
子共享模块
],
进口:[
公共模块,
FormsModule,
子共享模块
]
})
导出类SharedModule{}
@NGD模块({
声明:[
儿童教育指令,
子控件组件
],
出口:[
儿童教育指令,
子控件组件
]
})
导出类SharedChildModule{}
您不能向下推模块的依赖项,但可以向上导出模块

@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将不再能够删除未使用的模块,因为您正在将所有组件耦合在一起。从
SharedChildModule
中删除
FormsModule
也会变得很困难,因为您不知道有多少家长依赖它

您应该尽可能地保持模块的单一性和扁平性,并且让每个模块只导入它特定需要的内容

当消费者不知道其他模块是需求时,可以导出其他模块