更新:角度4でラッパーコンポーネントを実装する正しい方法は?
正しい質問はおそらくです:「どのように私はng-container
の私の独自のバージョンを実装しないので、私は使用することができ、」<ng-container my-directive ...>...</ng-container>
「の代わりに」<my-component ...>...</my-component>
」を
私は角4で新しいアプリを開発しています私はラッパーコンポーネントを使ってアプリケーション全体を構築したいので、実際のコンポーネントを必要に応じて交換することができます。これは簡単なコントロールでは簡単に動作しますが、複雑なコントロールでは個別のコンポーネントに分割したくありません。要件はかなり安定しています:表示/非表示のラベルとコンテンツパネルのタブのリスト 私たちは、このようないくつかの他のコンポーネントがあり
<ngb-tabset>
<ngb-tab title="Tab 1">
<ng-template ngbTabContent>...</ng-template>
</ngb-tab>
...
<ngb-tabset>
:NG-ブートストラップは、このようなものを使用することができ
<div class="my-tab-group">
<ul>
<li>Tab 1</li>
...
</ul>
<div class="my-tab" title="Tab 1">...</div>
...
</div>
代わりのこの時点では、特定の実装に私のアプリを抱き合わせを私は自分を定義したいです
<my-tabs-control>
<my-tab-control title="Tab 1">...</my-tab-control>
...
<my-tabs-control>
次に、タブが動作する方法を変更する必要がある場合は、1か所で発生します。しかし、ラッパーコンポーネントを使用すると、HTMLは汚染され、ホスト要素タグは所望のタグとインターレースされます。
<my-tabs-control>
<div class="my-tab-group">
<ul>
<li>Tab 1</li>
...
</ul>
<my-tab-control title="Tab 1">
<div class="my-tab" title="Tab 1">...</div>
</my-tab-control>
...
</div>
<my-tabs-control>
私の推測では、これは多くの人々が、角度成分で、ホスト要素削除/アンラップする方法を尋ねる理由である - を行うには、これは本当に簡単になるだろう。
いつもの答えは例えば、代わりに属性セレクタを使用することです:
Remove the angular2 component's selector tag
How to remove/replace the angular2 component's selector tag from HTML
しかし、これは我々が明らかに破壊し、使用部位、でタグ構造を知っておく必要があることを意味素敵な名前のラッパータグを使用することの全体的なポイント。
最後に、私はこれをどのように行うべきですか?パフォーマンス上の理由によりおそらく可能ではありませんか?私はRenderer2を見て始めましたが、私が望むことを実行する明白な方法を見つけていないので、非角形のDOMハックを避けたいと思います。
あなたはNG-コンテンツを使用して「トランスクルー」を使用するようになっています https://scotch.io/tutorials/angular-2-transclusion-using- ng-content公式の角書類ではこれが欠けているようです: https://github.com/angular/angular.io/issues/3099 – marvini
私はすでにコンテンツを投影するためにたくさんのコンテンツを使用していますが、これは問題を解決していませんコンポーネント自体によって作成されたラッパー/コンテナタグの私たちは、コンポーネントの代わりにディレクティブを使ってng-containerを使いたいものを並べ替えることができますが、それは面倒です。おそらく、デフォルトの属性セレクタの代わりに要素セレクタを使用してディレクティブを使用して、おそらくRenderer2 /コードを使用してコンテンツをレンダリングすることができます。私が本当に望むのは、単に「このコンポーネントの内容をラッパー/コンテナ/ホスト要素なしでレンダリングする」というスイッチです。悲しいことに、それは不可能だと思います。 – Etherman