Как проверить, равны ли два поля в Angular / Ionic? - PullRequest
0 голосов
/ 12 декабря 2018

Я хочу проверить, равны ли значения двух полей, эти поля должны быть переданы параметрами в функцию проверки, я делаю это, проблема в том, что она не может получить значение поля, этоПоявляется пустой, как Могу ли я получить значения правильно и динамически?

Мой конструктор форм, я использую функцию сопоставления для проверки полей cell_phone и подтверждения.

this.recharge = this.formBuilder.group({
  cell_phone: ['', Validators.required, Validations.match('cell_phone', 'cell_phone_confirmation')],
  cell_phone_confirmation: ['', [Validators.required]],
  value: ['', Validators.required],
  operator_id: ['', Validators.required]
});

В моей функции, лог консоли нулевой:

static match(field1: string, field2: string){
  return (group: FormGroup) => {
    console.log(group.get(field1));
  }
}

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

Я бы использовал корневое свойство для доступа к cell_phone_validator control

cell_phone: ['', [Validators.required, this.cellPhoneValidator]]


private cellPhoneValidator(control: AbstractControl) {
  if (control.root.get('cell_phone_confirmation') {
    return control.root.get('cell_phone_confirmation').value !== control.value ?
      { cellPhoneValidator: { value: control.value } } : null;
  }

}

EDIT: вы хотите использовать его для любого поля, поэтомудавайте сделаем это вообще

cell_phone: ['', [Validators.required, Validations.matchValidator('cell_phone_confirmation')]],
cell_phone_confirmation: ['', [Validators.required, Validations.matchValidator('cell_phone')]]

private matchValidator(controlValidationName: string): ValidatorFn {
  return (control: AbstractControl) => {
    const controlValidation = control.root.get(controlValidationName);
    if (!controlValidation) {
      return null;
    }
    return controlValidation.value !== control.value ?
      { matchValidator: { value: control.value } } : null;
  }
}
0 голосов
/ 12 декабря 2018

Вам необходимо создать пользовательский валидатор formGroup, чтобы проверить значения элементов управления формой и проверить тему

this.recharge = formBuilder.group({
  cell_phone: ['', Validators.required],
  cell_phone_confirmation: ['', Validators.required],
},
  {
    validator: checkMatchValidator('cell_phone', 'cell_phone_confirmation')
  }
);

Пользовательская функция валидатора

export function checkMatchValidator(field1: string, field2: string) {
  return function (frm) {
    let field1Value = frm.get(field1).value;
    let field2Value = frm.get(field2).value;

    if (field1Value !== '' && field1Value !== field2Value) {
      return { 'notMatch': `value ${field1Value} is not equal to ${field2}` }
    }
    return null;
  }
}

демонстрация стекаблиц ??

0 голосов
/ 12 декабря 2018

Вы можете попробовать вот так.

this.recharge = this.formBuilder.group({
  cell_phone: ['', Validators.required],
  cell_phone_confirmation: ['', [Validators.required]],
  value: ['', Validators.required],
  operator_id: ['', Validators.required]
},{ validator:  Validations.match });

static match(c: AbstractControl){
  const cellphone = c.get('cell_phone');
  const cellphoneconfirm = c.get('cell_phone_confirmation');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...