有没有办法将服务依赖项注入@Component
装饰,就像这样?
@Component({
selector: injectedService.getPrefix() + 'my-component'
})
export class MyComponent { }
或者,如果没有,是否有可能子类@Component
并将依赖注入子类以实现类似的结果?
答案 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()
完成之前创建组件,则无效。