2016-12-19 2 views
2

私はWebアプリケーションを構築するためにangular2(v2.2.4)を使用しています。このアプリでは、コンポーネントを動的に読み込む必要があります。私はstackoverflowのほぼすべての相対的な答えを読んで、憂鬱な事実を発見した:私たちは以下のように、このような私たちのコンポーネントをロードするために容器にターゲット要素を記述する必要があります。なぜコンポーネントをangular2で動的に読み込むときに、コンテナにターゲットを書き込む必要がありますか?

<div #target></div>

をその後、我々は、コンテナにそれを使用しますこのようなコンポーネントTSコード:最後に

@ViewChild('target', {read: ViewContainerRef}) vcRef: ViewContainerRef;

、動的にロードされた成分の容器は、DOM内の醜い添加元素<div _ngcontent-mbk-0></div>を有しています。

ここで、なぜ、すべてのコンポーネントをtsファイルに静的に書き込むときに、angular2にターゲット要素は必要ないのですか?もっと良い解決策はありますか?

答えて

0

要素のViewContainerRefにアクセスするにはドキュメント https://angular.io/docs/ts/latest/api/core/index/ViewContainerRef-class.html

によると、あなたは、ElementにViewContainerRefを注入 指令を配置するか、またはあなたはViewChildクエリを経由して にそれを得ます。

またViewContainerRefへの参照を取得する代わりにdivng-containerまたはtemplateを使用することができます。これらのタグは表示されませんDOM

+0

あなたの助けにはThx。私は今私の問題を解決できると思う。 – Rekoolno

1

Angular2は、あらかじめコンパイルをサポートするために作成されています。 コンポーネントテンプレートに書き込む内容は、意味を成す場所にJavaScriptが生成されます。 動的に追加されるコンポーネントの場合、Angular2には、動的コンポーネントを配置するために使用できるフックを生成できるアンカーが必要です。

Angular2は、HTML以外のテクノロジでレンダリングできるように構築されているため、DOMからの読み取りが必要な場合はどこでも抽象化が追加されています。

+0

あなたの説明のためのThx。私はangular2がtsファイルに書かれた静的なコンポーネントをレンダリングするために別の方法を使用することを意味しています。ダイナミックロードの場合、Angular2は同じ方法を使用できないため、ターゲット要素は不可欠です。 – Rekoolno

+0

あなたのコメントが何を意味するかは正確には分かりません。 Angular2はコンポーネントテンプレートを取得してDOMに追加し、バインディング '()'、 '[] '、' {{}}'を参照して値とイベントハンドラを割り当てますが、Angular2の仕組みではありません。 Angular2のコンポーネントでは、テンプレートはAngular2で処理(コンパイル)され、コンパイルされた結果のみが実際にDOMに追加されます。 –

関連する問題