2016-11-02 22 views
2

角度2では、特定のサービスに拡張できる1つの親サービスが必要です。 コンポーネントの属性は、使用するサービスを示します。 問題は、injector.get()がクラス名ではなくクラスとしてparamを必要とするため、私はそれを行う方法がわかりません。ここにコードサンプルがあります。インジェクタを使用してクラス名に基づいてサービスを取得する

import {Injectable, Injector, Provider} from '@angular/core'; 

@Injectable() 
export class ObjectFactoryService { 

    constructor(private injector: Injector) { 
    } 

    getObjectService(tableId: string): Provider { 
     //return this.injector.get(SpecificService); - works but this is class not classname 
     return this.injector.get(this.createObjectServiceName(tableId)); //error - provider not exists 
    } 

    private createObjectServiceName(tableId: string): string { 
     return tableId.charAt(0).toUpperCase() + tableId.slice(1) + "Service"; 
    } 
} 

答えて

3

あなたは文字列トークンを持つクラスを提供する場合は、トークン文字列

providers: [MyClass, {provide: 'MyClass', useExisting: MyClass}] 
myClass = this.injector.get('MyClass'); 
+0

うわー使用してそれらを取得することができます - 作品 - 多くのおかげで – piernik

関連する問題