Пользовательская функция проверки Angular 2+ ReactiveForm не запущена

Я строю свой FormGroup следующим образом:

this.datesGroup = this.fb.group({
  arrivalDate: [null, Validators.required],
  departureDate: [null, Validators.required]
}, (fg: FormGroup) => {
  console.log('validate');
  return moment.unix(fg.value.departureDate.epoc).diff(moment.unix(fg.value.arrivalDate.epoc)) > 0 ?
    null : {
      'departureBeforeArrival': true
    };
});
this.formGroup = this.fb.group({
  dates: this.datesGroup,
  accommodation: ['', Validators.required]
});

Но функция стрелки проверки выше никогда не запускается; консоль никогда не регистрируется. Что я делаю не так?


person Sammy    schedule 19.06.2017    source источник


Ответы (1)


Метод FormBuilder.group принимает 2 параметра:

group(controlsConfig: {
        [key: string]: any;
    }, extra?: {
        [key: string]: any;
    } | null): FormGroup;

где extra может быть object со свойством validator и/или asyncValidator.

Поэтому я бы изменил ваш код на это:

this.datesGroup = this.fb.group({
  arrivalDate: [null, Validators.required],
  departureDate: [null, Validators.required]
}, {
  validator: (fg: FormGroup) => {
    console.log('validate');
    return 1 > 0 ?
      null : {
        'departureBeforeArrival': true
      };
  }
});

Живой пример можно найти здесь https://plnkr.co/edit/BcExweMVcVxy1yKhwmJp?p=preview< /а>

person yurzui    schedule 20.06.2017
comment
+1 :). Я думаю, что документы могли бы лучше объяснить, что это за дополнительные означает, как и для FormControl и FormArray. (Я знаю, что это хорошо объяснено в FormGroup, но должно быть и в FormBuilder). - person developer033; 20.06.2017