Вызовите валидатор пользовательской формы более одного раза - PullRequest
0 голосов
/ 25 сентября 2019

Я использую специальный валидатор, чтобы проверить, совпадают ли значения 2 входов:

import { FormGroup } from '@angular/forms';

// custom validator to check that two fields match
export function MustMatch(controlName: string, matchingControlName: string) {
    return (formGroup: FormGroup) => {
        const control = formGroup.controls[controlName];
        const matchingControl = formGroup.controls[matchingControlName];

        if (matchingControl.errors && !matchingControl.errors.mustMatch) {
            // return if another validator has already found an error on the matchingControl
            return;
        }

        // set error on matchingControl if validation fails
        if (control.value !== matchingControl.value) {
            matchingControl.setErrors({ mustMatch: true });
        } else {
            matchingControl.setErrors(null);
        }
    }
}

Это работает для сопоставления 1 пары входов, как указано ниже:

ngOnInit() {
        this.applicationForm = this.formBuilder.group({
            firstName: ['', Validators.required],
            password: ['', [Validators.required, Validators.minLength(6)]],
            confirmPassword: ['', Validators.required],
            acceptTerms: [false, Validators.requiredTrue]
        }, {
            validator: MustMatch('password', 'confirmPassword')
        });
    }

Но я не могу понять, как включить его второй раз для другой пары, такой как электронная почта, и подтвердить электронную почту.

Выполнение

validator: MustMatch('password', 'confirmPassword'), validator2: MustMatch('email', 'confirmEmail')

Не ошибка, но неничего не делать, проверка по-прежнему работает для пароля, но не для электронной почты.Вы не можете иметь несколько свойств с одним и тем же именем, поэтому я попытался использовать «validator2».

Я не могу вызвать совершенно новый

{
   validator: MustMatch('password', 'confirmPassword')
}

внутри this.formBuilder.group ({}), так как он принимает только 2 аргумента.

1 Ответ

2 голосов
/ 25 сентября 2019

Из документа вы должны сделать это так

validators: [
               MustMatch('password', 'confirmPassword'),
               MustMatch('email', 'confirmEmail')
            ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...