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

Vla*_*dac 5 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,
        },
      ],
    };
  }
}
Run Code Online (Sandbox Code Playgroud)

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

@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,
      ],
    };
  }
}
Run Code Online (Sandbox Code Playgroud)

有没有像ModuleWithProviders但更像的东西ModuleWithImports

谢谢!

Eld*_*dar 4

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

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

这是stackblitz 应用程序示例