2016-04-24 41 views
1

有什么办法可以将服务依赖注入到@Component装饰中,像这样?装饰者的角度2依赖注入

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

或者,如果没有,也许才有可能subsclass @Component并注入的依赖到子类来实现类似的结果呢?

回答

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()完成之前创建了组件,它将不起作用。

+0

完美,谢谢。 –

+0

任何想法如何在ng2版本中做到这一点? – baryo

+0

我更新了我的答案(虽然没有测试过)。 –