web-dev-qa-db-ja.com

リアクティブフォームのフォーム配列の検証を設定および更新します

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などを追加できます。私が今達成しようとしているのは、selectTypecustom(フォーム上のラジオボタン値として設定されている)に等しい場合、アイテムの検証を変更する必要があるということです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を指定するにはどうすればよいですか?

9
user1752532

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());
14
Maxim Koretskyi