Пользовательский валидатор Angular 6 Reactive Forms получает ошибку, отображаемую из данных по умолчанию - PullRequest
0 голосов
/ 18 октября 2018

У меня есть FormArray в FormGroup, и каждый из FormArray имеет несколько FormGroup и может добавлять их динамически.

У меня есть Custom Validator, где он проверяет все данные в каждом из 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;
          }

Снимок экрана: enter image description here

URL-адрес Stackblitz: https://stackblitz.com/edit/angular-custom-validator-defaultdata

1 Ответ

0 голосов
/ 18 октября 2018

Чтобы избежать этой отметки как ошибки в исходных данных, вы можете добавить проверку, чтобы убедиться, что элемент управления формы dirty, что означает, что пользователь коснулся его.

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