装饰器的角度2依赖注入

时间:2016-04-24 09:43:34

标签: dependency-injection angular

有没有办法将服务依赖项注入@Component装饰,就像这样?

@Component({
    selector: injectedService.getPrefix() + 'my-component'
})
export class MyComponent { }

或者,如果没有,是否有可能子类@Component并将依赖注入子类以实现类似的结果?

1 个答案:

答案 0 :(得分:2)

更新> = RC.5

@NgModule({
  ...
})
export class AppModule {
  ngDoBootstrap(moduleRef) {
    appInjector(moduleRef.injector);
  }
}

appInjector实施见下文

原始< = RC.5

Angular2不直接支持这一点。您可以将注射器存储在Angular应用程序之外,然后从那里引用它,就像https://github.com/angular/angular/issues/4112#issuecomment-153811572@CanActivate()装饰器的解决方法一样。 (Plunker example

main.ts中,注射器已分配到appInjector

bootstrap(App, [
  Auth,
  HTTP_PROVIDERS,
  ROUTER_PROVIDERS,
  provide(LocationStrategy, {useClass: HashLocationStrategy})
]).then((appRef: ComponentRef) => {
  // store a reference to the application injector
  appInjector(appRef.injector);
});

app-injector.ts

let appInjectorRef: Injector;
export const appInjector = (injector?: Injector):Injector => {
    if (injector) {
      appInjectorRef = injector;
    }

    return appInjectorRef;
};

然后您可以像

那样获得对注射器的引用
appInjector()...

如果在bootstrap()完成之前创建组件,则无效。