選択した入力(ラジオまたはチェックボックス)に基づいて、コンポーネントを動的にajaxで追加します。Angular2 - 循環参照の動的コンポーネントに注入すると依存関係注入が機能しない
Plunkr:我々はquestions.jsonからのJSONレスポンスを取得し、質問を移入src/parent/parent.ts
:
第1層:https://plnkr.co/edit/uvGo3RxCkUPeuknVu9m8?p=preview
私はより良い理解のための流れを説明します。
controlType
に基づいて、a-component
またはb-component
のいずれかをsrc/parent/parent.html
にロードします。
私はa-component
のチェックボックスまたはb-component
のラジオボタンを選択すると、私はcreateDynamicComponent()
を呼び出し、componentData
に渡します。
componentData
は、選択したオプションに基づいて、次のコンポーネントのメタデータ情報になります。
さて、componentData
がdynamic-component
インサイドsrc/controls/a.html
またはsrc/controls/b.html
からdynamic-component
に渡され、私はプロバイダを解決し、entryComponentsにquestions
データを注入し、(a-component
とb-component
)
すべてが正常に動作して私はHService
(コンポーネントデータ構築ロジックを保持する)をa-component
とb-component
の両方に導入しました。
、Error: Can't resolve all parameters for BComponent: ([object Object], [object Object], ?)
私はサービスを取り出し、コメントコードを使用する場合は、b-component
のコンストラクタ内部HService
である最後のパラメータは、すべてが正常に動作します。
this.componentData = {
'questions': {
"question": "This is a " + this.level + " level question?",
"controlType": "radio",
"answers": [
"Yes",
"No",
"None"
]
},
"component": BComponent,
"level": this.level
};
編集1:私はHService
はすでにa-component
に注入しており、そこには、プロバイダの解決エラーはありませんし、それが正常に動作しています。 b-component
に追加するだけで、私はエラーに直面します。
大歓迎です!
ナイスキャッチがありますが、これは従うべき良好なパターンであると思いますか?私は同じタイプのコンポーネントを動的に作成するコンポーネントを意味します。再帰的にそれをそれに追加します。ダイナミックコンポーネント注入部分は、私の意見では分かりませんが、サービスでは分離する必要があります。 – echonax
@yurzuiソリューションに感謝します。それは素晴らしい仕事です。あまりにも理解し、Angular2で学ぶ – MrVinay1989
@echonax私はサービスに動的コンポーネント注入部分を作ることを考えています。それを調べます。 – MrVinay1989