Сравнение значений в пользовательском валидаторе в Angular - PullRequest
2 голосов
/ 14 июля 2020

Я пытаюсь сравнить два входных значения в настраиваемом валидаторе. Ошибка должна быть, если minValue больше maxValue.

FormGroup:

    sumFormGroup = this.formBuilder.group({
     from: ['', [Validators.min(0), sumValidator]],
     to: ['', [Validators.min(0), sumValidator]]
  });

настраиваемый валидатор:

 function sumValidator (control: AbstractControl):{[key: string]: boolean} | null {
   let minValue = control.get(this.sumFormGroup.get('from')).value;
   let maxValue = control.get(this.sumFormGroup.get('to')).value;
   if(minValue != maxValue){
    return {'ageValidator': true}
  }
  return null;
};

Ошибка в консоли браузера:

ERROR TypeError: Cannot read property 'sumFormGroup' of undefined
    at sumValidator in bla.ts
    (...)

Может кто поможет? Спасибо

1 Ответ

1 голос
/ 14 июля 2020

Помогло бы сделать проверку «более чистой». Также я бы посоветовал провести две проверки для этого. легко создать еще два валидатора с именами smallerThanOrEquals и greaterThanOrEquals.

Если вы будете sh синхронизировать c проверки, вы можете попробовать сделать это в своем компоненте следующим образом:

ngOnInit() {
    // Example in the init, but make sure this.sumFormGroup is already created. 
    this.sumFormGroup.get('from').valueChanges.subscribe(() => this.sumFormGroup.get('to').updateValueAndValidity({ onlySelf: true, emitEvent: false }));
    this.sumFormGroup.get('to').valueChanges.subscribe(() => this.sumFormGroup.get('from').updateValueAndValidity({ onlySelf: true, emitEvent: false }));
}
...