angular - 以 react 形式设置和更新表单数组的验证

标签 angular angular-reactive-forms

在 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]] 
});

这构建了表单,我可以从该表单和表单中的项目中添加删除等。 我现在想要实现的是,当 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 但是当 FormControls 是数组时我如何指定特定的 FormControl

最佳答案

how do i specify a specific FormControl when the FormControls are an array?

您必须使用 at 描述的方法 here获取单个控件:

this.items.at(0).clearValidators();

如果您想清除 name 控件的验证器,请这样做:

 this.items.at(0).controls.name.clearValidators();

如果你想删除每个控件的验证器,表单数组似乎没有提供这样的 API。您必须遍历表单数组控件并删除每个控件的验证器:

this.items.controls.forEach(c => c.clearValidators());

关于angular - 以 react 形式设置和更新表单数组的验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45145708/

相关文章:

javascript - 如何在 Angular 中为自定义验证器添加自定义验证错误消息

Angular4 更改选择框返回错误值

angular - Angular2模板未更新

Angular 8 : Reactive Form match password

angular - react 形式 : Radio button selects both

javascript - Angular 7 中的动态验证 : enable() & setValidators depending on flags triggered by changes

angular - 带有参数的自定义 Angular 验证器只运行一次

angular - 如何使用路由器 socket 加载 Angular 组件

angular - 如何通过 routerLink 指令指定查询参数

Angular 2 外部输入