Создайте настраиваемый валидатор для проверки нескольких полей формы

У меня есть следующая настройка формы:

this.form = new FormGroup({
  ...
  year: new FormControl("", validateDateMethod(year, month, day)),
  month: new FormControl("", validateDateMethod(year, month, day)),
  day: new FormControl("", validateDateMethod(year, month, day))
});

Я хочу создать настраиваемый валидатор для проверки даты на основе 3 полей.

Можно ли создать валидатор на основе нескольких значений формы?

Обычные таможенные валидаторы просто принимают текущий контроль и любые значения параметров.

Спасибо


person Sun    schedule 12.11.2019    source источник
comment
Просмотрите код по этой ссылке: stackoverflow.com/a/44449802/3875919   -  person user3875919    schedule 12.11.2019
comment
Я пробовал нечто подобное, но получаю сообщение об ошибке: аргумент типа не может быть назначен параметру типа ValidatorFn | ValidatorFn [] | AbstractControlOptions '. Литерал объекта может указывать только известные свойства, а «валидатор» не существует в типе «ValidatorFn | ValidatorFn [] | AbstractControlOptions   -  person Sun    schedule 12.11.2019
comment
Мне нужно использовать конструктор форм, чтобы очистить ошибку   -  person Sun    schedule 12.11.2019
comment
Вы можете добиться этого, установив настраиваемое свойство в объекте ошибок FormControl, а затем отобразив сообщение об ошибке в DOM с помощью директивы *ngIf.   -  person user3875919    schedule 12.11.2019


Ответы (1)


Вы можете сгруппировать все три даты в группу форм и добавить к ней валидатор. Затем вы можете проверить все три поля.

 this.form = new FormGroup({
      ...
      dateGroup:this.formBuilder.group({
      year: new FormControl(""),
      month: new FormControl(""),
      day: new FormControl("")
    },{validator:validateDates}) 
  });

    validateDates(c:AbstractControl){
    const year = c.get('year');
    const month = c.get('month');
    const day = c.get('day');
    ....
    }
person Saloo    schedule 12.11.2019
comment
вам нужно передать всю formGroup в качестве аргумента для доступа ко всем элементам управления: validateDates (c: FormGroup) - person Bilel-Zheni; 12.11.2019
comment
Это не создаст проблемы, потому что FormGroup расширяет AbstractControl - person Saloo; 12.11.2019
comment
Идеально. Спасибо. - person Sun; 12.11.2019