In angular 4私はそのようなフォーム配列を持つフォームを作成しています
this.formBuilder.group({
name: ['', [Validators.required, Validators.minLength(3)]],
required:false,
selectType: ['', [Validators.required]],
items: this.formBuilder.array([this.buildItems()])
})
...
buildItems() {
return this.formBuilder.group({
name: ['', [Validators.required]]
});
これによりフォームが構築され、このフォームおよびフォーム内のアイテムからremoveなどを追加できます。私が今達成しようとしているのは、selectType
がcustom
(フォーム上のラジオボタン値として設定されている)に等しい場合、アイテムの検証を変更する必要があるということですname
および検証要件をクリアします。
私はそのように別のフォームでセットと更新を行いました
changeValidation() {
if(condition){
this.form.get('name').setValidators(Validators.required);
this.form.get('name').updateValueAndValidity();
}
}
これは問題なく動作しますが、フォーム配列の検証を更新する方法がわかりません。私が試してみました
this.items.clearValidators();
this.items.updateValueAndValidity();
エラーは表示されませんが、機能しません。特定のFormControl
をターゲットにしていないため、どの種類の意味がありますが、FormControl
が配列である場合、特定のFormControls
を指定するにはどうすればよいですか?
formControlsが配列の場合、特定のFormControlを指定するにはどうすればよいですか?
単一のコントロールを取得するには、 here で説明されているat
メソッドを使用する必要があります。
this.items.at(0).clearValidators();
name
コントロールのバリデータをクリアする場合は、次のようにします。
this.items.at(0).controls.name.clearValidators();
すべてのコントロールのバリデータを削除する場合、フォーム配列はそのようなAPIを提供しないようです。フォーム配列コントロールを反復処理し、各コントロールのバリデーターを削除する必要があります。
this.items.controls.forEach(c => c.clearValidators());