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

时间:2019-05-14 21:42:45

标签: javascript angular

在我的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 {}

1 个答案:

答案 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,因此导入它的父母也将收到CommonModuleFormsModule

您基本上是在摇树,这使得单元测试非常困难。

Angular将不再能够删除未使用的模块,因为您将所有内容耦合在一起。从FormsModule中删除SharedChildModule也将变得困难,因为您将不知道有多少父母依靠它。

您应该尽量将模块​​保持为 singular flat ,并使每个模块仅导入其特别需要的内容。

当使用者不知道其他模块是必需的时,您可以导出另一个模块。

相关问题