angular - 使用表单数组中另一个控件的值的最大验证器值

标签 angular angular-reactive-forms angular-validation

我希望下面的代码能够很好地解释我的需求。我需要在计数字段上使用最大数量验证器来检查另一个容量字段的值。我遇到的一个问题是这两个字段都在表单组的表单数组内,因此会有许多计数/容量组合的实例。任何帮助将不胜感激。使用 Angular 7。

setForm() {
  this.form = this.fb.group({
    types: this.fb.array([])
  });
  this.typesArray = this.form.get('types') as FormArray;
}

addType() {
  this.typesArray.push(this.setType(0,0));
}

setType(countValue, capacityValue): FormGroup {
  return this.fb.group({
    count: [{value: countValue}, [
      Validators.pattern(/^[0-9]*$/i ),
      Validators.max(WHAT PUT HERE FOR ALWAYS CHECKING VALUE OF CAPACITY??)
    ]],
    capacity: [{value: capacityValue}, Validators.pattern(/^[0-9]*$/i )],
  });
}

如果在编辑任一字段时计数字段大于容量字段,我希望在 UI 中显示验证消息。这只是两者的每个实例之间的连接。

最佳答案

当您尝试基于另一个表单控件验证表单控件时,最好的情况是创建自定义表单组验证器

自定义验证器

export function maxValueValidator(fb: FormGroup): ValidationErrors | null {
  const count = +fb.get('count').value || 0;
  const capacity = +fb.get('capacity').value;

  if (capacity > count) {
    return {
      maxValue:
      {
        count,
        capacity
      }
    }
  } else {
    null
  }

}

将验证器添加到 formGroup

this.form = fb.group({
  count: null,
  capacity: [null,]
}, {  // 👈 after we have finished set the controls we add formGroup validators
    validators: [maxValueValidator] 
  });

}

stackblitz demo 🚀

关于angular - 使用表单数组中另一个控件的值的最大验证器值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57627765/

相关文章:

angular - 如何迭代现有的 FormControl 验证器

Angular 2 验证器未按预期工作

javascript - Angular2 组件不检测路由参数更新(路由器 3.0)

Angular:深度复制响应式(Reactive)形式

angular - Bootstrap Modal 不显示正确的数据

angular - Validators.minlength 不适用于 Angular react 形式

angular - 如何让我的 Angular 6 组件继承其扩展组件的样式?

javascript - 总值包含 Highcharts 中当前值的一部分

html - 重置 Angular react 形式不会更新选择选项

javascript - 如何在 AngularJS 中启用/禁用 html 控件的验证