2017-07-08 4 views
0

私はフォーム配列を持っていますが、別のフォームをプッシュするとpreviusフォームの検証が設定されています。角度でフォームグループアレイをリセットする方法

この例では[https://plnkr.co/edit/ApCn3YicMjfm2vhSOudj?p=preview][1]https://plnkr.co/edit/ApCn3YicMjfm2vhSOudj?p=previewですが、2番目のフォームに名前の検証が表示されていますが、どのように解決できますか?

+0

あなたの正確な問題は何ですか? – Ajith

+0

フォームに記入して送信すると、2番目のフォームが最初のフォームのバリデーションを持つことがわかります。 '有効な名前'というメッセージが表示されます。2番目、3番目などのフォームをリセットして他のフォームのバリデーションを表示しないようにします。 – LLaza

+0

私は提出するときに空白のフォームが必要だと思います、そうですか? – Ajith

答えて

1

上記のコメントに基づいて、プランナーと一緒にいたずらすると、私はついにあなたが求めているものを見ると思います。

この問題は、フォームの仕組みと関係があります。

1)自体は、ビューに表示されたフォーム要素:

フォームは、二つの部分を有しています。

2)フォームデータ構造は、あなたが持っている反応形式のために、this.user変数でコンポーネントコードで定義されています。フォームの値と有効性の状態を追跡するのはこのデータ構造です。

あなたのコードを見ると、ngForは複数のフォーム要素(上記の#1)を作成していますが、と同じフォームデータ構造(上記#2)を使用しています。したがって、複数のフォームは常に同じ値を表示し、同じ検証状態を持ちます。

あなたはformArrayを構築し、作成したすべての "フォーム"に対してその配列にエントリを作成する必要があります。

私はここにフォームの配列の例を持っている:あなたはそれぞれに別々のFormGroupを作成することができますので、https://github.com/DeborahK/Angular2-ReactiveForms

0

すべてのフォームは、フォームデータを保持して述べ、「ユーザー」という名前の、ここで同じFormGroupを、共有しますフォームを送信するか、submitメソッドのたびに "user"の値をリセットしますが、後者は現在のフォームがデータを失ってしまいます。彼らは "user"を共有しました。

onSubmit({ value, valid }: { value: User, valid: boolean }) { 
console.log(value, valid); 
this.data.push(value) 
this.user = this.fb.group({ 
    name: ['', [Validators.required, Validators.minLength(2)]], 
    account: this.fb.group({ 
    email: ['', Validators.required], 
    confirm: ['', Validators.required] 
    }) 
}); 
console.log(this.data) 

}

関連する問題