Я использую специальный валидатор, чтобы проверить, совпадают ли значения 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 аргумента.