从默认数据显示角6种活性形式定制的校验得到错误(Angular 6 Reactive Forms C

2019-10-28 12:44发布

我有一个FormArray在FormGroup并且每个FormArray的有多个FormGroup的和可以动态地添加他们。

我有一个自定义验证,它检查与每个FormArray的所有数据,以验证数据的重复。 目前,它也验证自身被抛出一个错误的初始数据。

有没有办法从自身抛出时,它的校验初始数据限制错误?

它的工作很好,当添加新的数据,并具有与现有的相同的值。

for (let assign of this.additionalAssign) {
      const fg = new FormGroup({
        "payRate": new FormControl(assign.jobRate, Validators.required),
        "position": new FormControl(assign.position, Validators.required),
        "location": new FormControl(assign.location, Validators.required),
        "department": new FormControl(assign.department, Validators.required)
      }); 
      fg.validator = this.jobDataValidator.bind(this);
      this.addPay.push(fg);
    }

验证器:

jobDataValidator(control: FormControl): {[s: string]: boolean} {
        let value = this.getJobLocDeptValidity(control);
        if(value.length > 0){
          return {'sameJobData': true};
        }
        return null;
      }

getJobLocDeptValidity(control: FormControl):any[] {
            let additionalAssignments = this.additionalAssignmentsForm.value.payArray;
            let test = additionalAssignments.filter(item =>  !!control.value.position && item.position ===              !control.value.location && item.location === control.value.location);
            return test;
          }

截图:

Stackblitz网址: https://stackblitz.com/edit/angular-custom-validator-defaultdata

Answer 1:

为了避免这种标识上的原始数据的错误,你可以添加一个检查,以确保表单控件是dirty的,这意味着用户触摸它。

if(value.length > 0 && control.dirty){
      return {'sameJobData': true};
}


文章来源: Angular 6 Reactive Forms Custom Validator getting error shown from Default Data