首页 > 解决方案 > 如果填写了一个字段,则需要删除 Angular Form Arrays

问题描述

我在表单数组需要验证方面苦苦挣扎,如果给定字段之一已填充,我必须从表单数组中删除验证。

这是我的代码

.ts

    this.form = fb.group({
    contract: this.fb.array([], this.AtLeastOneFieldValidator)
    )};
  ifContractEmpty() {
    const eArray = this.contractArray.value;
    const length = this.contractArray.length;
    if (length > 1) {
      if (
        eArray[length - 1].salesOrderNumber == null &&
        eArray[length - 1].customerPOnumber == null &&
        eArray[length - 1].contractNumber == null
      ) {
        return true;
      } else {
        return false;
      }
    }
  }

  AtLeastOneFieldValidator(group: FormGroup): { [key: string]: any } {
    let isAtLeastOne = false;
    if (group && group.controls) {
      for (const control in group.controls) {
        if (
          group.controls.hasOwnProperty(control) &&
          group.controls[control].valid &&
          group.controls[control].value
        ) {
          isAtLeastOne = true;
          break;
        }
      }
    }
    return isAtLeastOne ? null : { required: true };
  }

 addContactGroup() {
    return this.fb.group({
      salesOrderNumber: "",
      customerPOnumber: "",
      contractNumber: ""
    });
  }

  addContract() {
    this.contractArray.push(this.addContactGroup());
  }
 get contractArray() {
    return <FormArray>this.rForm.get("contract");
  }

我已经在 html 上设置了 required 属性,但是如果我不确定是否应该这样做。我唯一的事情是来自这三个,如果一个被填满,那么其他两个不应该被要求。

从上面可以看到,我尝试使用自定义验证器,但这没有帮助

标签: angulartypescript

解决方案


推荐阅读