2016-04-08 8 views
4

DynamicComponentLoaderを使用して別のコンポーネントを動的に読み込むコンポーネントがあります。ただし、動的コンポーネントにはサービスを注入する必要があります。しかし、私はこれについてどうやって行くのか分かりません。私は、DynamicComponentLoaderがResolvedProvider配列を受け入れることをAngular.ioの文書から見ています。Angular2を使って動的コンポーネントにサービスを挿入する方法

私が行うことで、プロバイダを取得しようとしました:

var provider = provide(ManagerService, {useExisting: ManagerService}); 
dcl.loadIntoLocation(this.data.template, this.er, "content",[provider]); 

これが動作するようには思えません。 example on plunkerが表示されます。

plunkerの例では、Infoコンポーネントがロードされている(サービスを必要としないため)代わりのコンポーネントが読み込まれないことがわかります。

サービスがルートコンポーネントに注入されているので少し混乱しています。そのため、呼び出されたときに自動的にすべての子コンポーネントに注入されると考えました。

このサービスをどのように注入するのですか?

答えて

1

あなた動的にロードされたコンポーネントは、それが通常のDIのように動作し、コンストラクタでサービスを注入した場合これは、任意の通常のDIとは異なる

this.dynamicComponentLoader.loadIntoLocation(MyComponent, this.elementRef, "content") 


class MyComponent{ 
    constructor(someService:SomeService){}//injected here when instantiated 
} 

すべきではありません。

サービスがプロバイダの配列に登録されていることを確認してください。チェーンのコンポーネントレベル以上(親またはブートストラップ)

+1

これは私が考えたものです。あなたはプランナーの例を見ましたか?あなたが見ることができるように、明らかに注入されていないし、私が見る限り、すべてを正しく設定している。 – RHarris

関連する問題