有条件的导入/覆盖模块导入

时间:2019-11-13 10:04:06

标签: angular

我想将模块配置从一个模块传播到另一个模块。我发现很难对此进行详细解释,因此我将举一个例子。

我有一个类似这样的模块:

@NgModule({
  declarations: [
    ButtonComponent,
    TranslatePipe,
  ],
  imports: [
    CommonModule,
  ],
  exports: [
    ButtonComponent,
  ],
})
export class ButtonModule {
  static withConfig(config: ButtonModuleConfig): ModuleWithProviders {
    return {
      ngModule: ButtonModule,
      providers: [
        {
          provide: TranslateService,
          useClass: config.translateService,
        },
      ],
    };
  }
}

我想做的事情是另一个模块:

@NgModule({
  declarations: [
    PageComponent,
  ],
  imports: [
    CommonModule,
    ButtonModule, // the one defined above without overriding the TranslateService
  ],
  exports: [
    PageComponent,
  ],
})
export class PageModule {
  static withConfig(config: PageModuleConfig): ??? {
    return {
      ngModule: PageModule,
      imports: [
        ButtonModule.withConfig({
           translateService: config.translateService,
      ],
    };
  }
}

是否有类似ModuleWithProviders的东西,更像是ModuleWithImports的东西?

谢谢!

1 个答案:

答案 0 :(得分:3)

如果您使页面模块能够为翻译服务提供价值,那么它将起作用。

export class PageModule {
  static withConfig(config: any): ModuleWithProviders {
    return {
      ngModule: PageModule,
      providers: [
        {
          provide: TranslateService,
          useValue: config.translateService
        }
      ]
    };
  }
}

这是sample stackblitz应用程序。