2016-11-14 9 views
3

私はNG2で<form>要素のいくつかの奇妙な行動に気づいていると私は、誰かが私にそれを説明する必要があります:)なぜangle2フォームがhtmlの<form>要素で正しく機能しないのですか?

私はだから今、それが正常に動作しているだけでPlunker例 https://plnkr.co/edit/vdrHJBNdd26y6YhPXTHD?p=preview

を作成しました。値を入力して「パラメータを追加」をクリックすると、入力値がモデルで更新され、入力フィールドに保存されます。

しかし、あなたはフィールドに、このhttps://plnkr.co/edit/vdrHJBNdd26y6YhPXTHD?p=preview と入力なめらかよう<form>要素を使用して<div>をラップし、「パラメータを追加」を再度クリックすると、(モデルにそれがまだ存在する)フォームが更新されますと、あなたの値が消えます。それがなぜ起こるか把握できません。あなたの答えに事前に感謝します。

+0

私はフォームがなぜ提出されるのか分かりませんが、あなたがしたように動的フォームを構築できるかどうかはわかりません。たとえば、Plunkerでは、入力フィールドと選択フィールドにはすべて同じ「名前」属性がありますが、正しくないようです。 https://angular.io/docs/ts/latest/cookbook/dynamic-form.htmlを見ましたか? – AngularChef

+0

@AngularFranceええ、多分あなたは正しいと私はうまくやっていない。しかし、私は、ngModelと2つのデータバインディングでテンプレート駆動のアプローチを試したかったのです。 – ilyablbnv

+0

@AngularFrance 'name'属性が複数回繰り返されていたため、新たに追加された値は以前に追加されたすべてのフィールドをデフォルト値に置き換えていました。 –

答えて

3

理由は、formallの入力をngForの入力で表示するため、すべてのフィールドが表示されるためです。しかし問題は、すべての要素に対して同じ名前属性を持っていることです。つまり、name="name" & name="test"です。したがって、新しい入力がname'' & typethis.types[0]String)で追加されると、すべてのフォーム要素に同じ値が適用されます。

<form #form="ngForm"> 
    <div *ngFor="let param of paramsList; let i=index"> 
     <input type="text" [(ngModel)]="param.name" name="{{'name'+i}}"> 
     <select [(ngModel)]="param.type" name="{{'type'+i}}"> 
      <option *ngFor="let type of types" [ngValue]="type">{{type}}</option> 
     </select> 
    </div> 
</form> 

Demo Plunkr

注:どういうわけか[attr.name]="'name'+i"が機能していません。

+0

ありがとうございます!私の悪い:) – ilyablbnv

+0

@ilyablbnv 'formGroup'(モデル駆動型)は、このようなシナリオのために行くより良い方法です..あなたを助けてうれしい、ありがとう;) –

関連する問題