2016-04-24 40 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

我更新了我的答案(雖然沒有測試過)。 –