Как создать собственный валидатор формы в 2 ввода?я хочу проверить, что один входной номер всегда больше друг друга - PullRequest
0 голосов
/ 20 сентября 2018

Как создать собственный валидатор формы в 2 ввода?Я хочу проверить, что одно входное число всегда больше другого.

  ValidateMaxMin(control: FormControl) {
    console.log(control.value.productMin);
    if (control.value.productMin != 0) {
      return { hasError: true };
    }
    return null;
  }



 this.productForm = this.fb.group ({ //form validator for create and update
      '_id': [ "" ],
      'productName': [ "", Validators.compose([Validators.required, Validators.pattern(/^[a-zA-Z\s]*$/), Validators.minLength(1), Validators.maxLength(50)]) ],
      'supplierId': [ "", Validators.compose([Validators.required, Validators.pattern(/^[a-f\d]{24}$/i), Validators.minLength(24), Validators.maxLength(24)]) ],
      'brandId': [ "", Validators.compose([Validators.required, Validators.pattern(/^[a-f\d]{24}$/i), Validators.minLength(24), Validators.maxLength(24)]) ],
      'categoryId': [ "", Validators.compose([Validators.required, Validators.pattern(/^[a-f\d]{24}$/i), Validators.minLength(24), Validators.maxLength(24)]) ],
      'productPrice': [ "", Validators.compose([Validators.required, Validators.pattern(/^[0-9]\d*$/), Validators.min(1), Validators.max(99999)]) ],
      'productQuantity': [ "", Validators.compose([Validators.required, Validators.pattern(/^[0-9]\d*$/), Validators.min(1), Validators.max(99999)]) ],
      'productMax': [ "", Validators.compose([Validators.required, Validators.pattern(/^[0-9]\d*$/), Validators.min(1), Validators.max(99999)]) ],
      'productMin': [ "", Validators.compose([Validators.required, Validators.pattern(/^[0-9]\d*$/), Validators.min(0), Validators.max(99999), this.ValidateMaxMin ]) ],

    });

В приведенном выше коде я могу проверить только одно конкретное поле, тогда как мое намерение состоит в том, чтобы указать / получить два поля и сравнить их.

1 Ответ

0 голосов
/ 20 сентября 2018

Вот метод проверки, который будет делать то, что вы хотите

static ValidateMaxMin(firstField: FormControl | AbstractControl | null,
                      secondField: FormControl | AbstractControl | null,
                      message = `one input number should alwasy be greater than another`
): ValidatorFn {
return (): ValidationErrors | null => {
  if (firstField && secondField && firstField.value >= secondField.value) {
    const notGreater = { notGreater: { message: message } };
    secondField.setErrors(notGreater);
    return notGreater;
  }
  notGreater!.setErrors(null);
  return null;
};

}

и пример, как вы можете использовать его в своих формах

this.form = this.fb.group({
  firstField: ['', Validators.required],
  secondField: ['', Validators.required],
});
this.form.setValidators(Validators.passwordConfirming(this.form.get('password'), this.form.get('passwordConfirm')));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...