如何在运行时为组件选择Angular 2服务

时间:2017-02-28 22:15:02

标签: javascript angular dependency-injection

我有一个要求,基于配置参数,选择特定服务作为组件的注入。我看到的所有示例都真正使用特定服务并在组件构建时使用它。

有没有办法在运行时执行此注入?

1 个答案:

答案 0 :(得分:1)

您可以使用根据某些配置返回不同实例的工厂

@NgModule({
  providers: [
    ConfigService,
    { provide: APP_BASE_HREF, useFactory: loadConfig, deps: [ConfigService] },
  ],
  ...

另见How to pass parameters rendered from backend to angular2 bootstrap method

function myServiceFactory(config:ConfigService) {
  switch(config.someProp) {
    case 'someValue': return new ClassA();
    default: return new ClassB();
  }
}

@Component({
  providers: [
    { provide: MyService, useFactory: myServiceFactory, deps: [ConfigService] }
  ],
  ...