2017-02-13 7 views
7

は、私がこれを行うことができます。これに代えて角度2:代わりに、コンストラクタ・インジェクションのプロパティ注射

export class BaseComponent { 
protected config: IConfig; 

@Inject(AppConfig) protected appConfig: AppConfig; 

constructor() 
{ 
    this.config = this.appConfig.getConfig();  
} 

export class BaseComponent { 
config: IConfig; 

constructor(
    private appConfig: AppConfig, 
    ) 
{ 
    this.config = appConfig.getConfig();  
} 

目標は、コンストラクタの署名を簡単にすることであるので、すべての子コンポーネントをないようにコンストラクタにappConfigを指定する必要があります。したがって、このように見えるようにBaseComponentから継承コンポーネント:

@Component({ 
    selector: 'sport-templates', 
    templateUrl: 'templates.component.html', 
    styleUrls: [ 'templates.component.scss' ], 
    encapsulation: ViewEncapsulation.None 
}) 
export class SportTemplates extends BaseComponent implements OnInit { 

    constructor() { 
     super(); 
    } 

代わりに、このような:

@Component({ 
    selector: 'sport-templates', 
    templateUrl: 'templates.component.html', 
    styleUrls: [ 'templates.component.scss' ], 
    encapsulation: ViewEncapsulation.None 
}) 
export class SportTemplates extends BaseComponent implements OnInit { 

    constructor(appConfig: AppConfig) { 
     super(appConfig); 
    } 
+0

@角度/コアにありますか? – PaladiN

+0

ここで私の質問の答えが見つかりました: https://stackoverflow.com/questions/42461852/angular-2-inject-service-manuallyありがとうございます。 –

答えて

0

はありません、あなたはそれを行うことはできません。 注入サービスは、コンストラクタが呼び出されたときに注入されます。

目的はコンストラクタの署名を簡略化することです。

コンストラクタ署名を単純化する必要はありません。読みやすくするために、複数の行に書き込むことができます。

ので、すべての子コンポーネントは、あなたのケースでは、その コンストラクタ

であなたのクラスがそれをアクセスする継承するクラスだけをのAppConfigを指定する必要はありませんします。しかし、コンポーネントで使用されている子コンポーネントを子コンポーネントとすると、親コンポーネントの変数にはアクセスできません。あなたはそれらを渡す必要があります。

あなたthis.configが継承されたコンポーネントに常に表示されますを更新しました。は、再度appConfigSportTemplatesコンポーネントに注入する必要はありません。

+0

返信いただきありがとうございます。私は私の質問で少し明確化を追加しました。 –

+0

@NikolaYankov更新の回答 –

0

あなたはこれを行うことができます。

myService: MyService = this.injector.get(MyService); 
constructor(private injector:Injector) {} 

インジェクターを使用して、コンストラクタ・インジェクションのための最善の解決策を見出した

+0

それは動作しますが、それは真の方法のように見えません。サービスロケータのパターンによく似ています。違いは微妙だと認めなければならないが。 – XOR

関連する問題