2017-08-02 3 views
0

私はリストを編集することを目的としたコンポーネント(ListComponentと呼ぶ)を持っています。ユーザーは要素の追加、削除、並べ替えを行うことができます。Angular 4では、テンプレートで使用されているコンポーネントのタイプをプログラムで変更できますか?

<div> <!-- Some Buttons --> </div> 
<ul> 
    <li *ngFor="element in dataArray"> 
     <string-editor [(NgModel)]=element></string-editor> 
     <!-- More Buttons --> 
    </li> 
</ul> 

<string-editor>も、基本的なスタイリングのビットとだけ入力コンポーネントであるテンプレートとカスタムコンポーネントである:そのテンプレートは、次のようになります。私ができるようにしたいのは、異なるタイプのデータ(例えば、数値、複数のフィールドを持つカスタムオブジェクト)を扱うことができるListComponentの複数のバージョンを持つことです。これを行うには、テンプレート内の<string-editor>を別のものコンポーネントクラス(<number-editor>または<my-custom-object-editor>など)。これらはすべてNgModelをサポートします。私は動的なコンポーネントの作成を見てきましたが、*ngForの変更検出でそれを使用する方法はないようです。

要約すると、<string-editor>を別のタグにプログラムで変更する方法はありますか?そうでない場合、*ngForの変更検出で動的コンポーネント作成を使用できる方法はありますか?

答えて

0

できることは次のとおりです。

どのスイッチを使用する必要があるか判断できる場合は、スイッチを使用してください。他https://angular.io/api/common/NgIf

+0

私は今の回避策として、それを使用する場合は、他の

NgSwitch https://angular.io/api/common/NgSwitch がNG場合、またはもンを書くことができます。ウェブサイトの形が整形されているので、いくつかのタイプのカスタムオブジェクトのリストが必要になります。私は、可能なすべてのオブジェクト型をハードコードするのではなく、(たとえばメソッド、サブクラスなどを介して)必要なときに 'の代わりに使用するコンポーネントを指定できるソリューションを好むテンプレート内の –

+0

ngForでこのコードが可能かどうかは知っていませんが、これも調べることができますhttps://netbasal.com/angular-2-understanding-viewcontainerref-acc183f3b682 –

+0

私はそれを調べて、それがうまく動作するかどうか。やや有望ですね。 –

関連する問題