Я бы подошел к этому как к валидатору во всей FormGroup, а не к отправке формы, а затем выполнил бы проверку.
Когда вы определяете FormGroup, вы можете добавить валидатор для всей группы, давая вамдоступ ко всем элементам управления / значениям как таковой:
validatePasswords(formGroup: FormGroup): any {
const password = formGroup.controls['password'];
const confirmPassword = formGroup.controls['confirmPassword'];
// don't validate
if (password.pristine || confirmPassword.pristine) {
return null;
}
formGroup.markAsTouched();
if (password.value === confirmPassword.value) {
return null;
}
return confirmPassword.setErrors({
notEqual: true
});
}
form = this.formBuilder.group({
. . .,
password: [
'', [
Validators.required,
Validators.pattern(regexPatterns.password),
]
],
confirmPassword: [
'', [
Validators.required,
Validators.pattern(regexPatterns.password)
]
]
}, {
validator: this.validatePasswords
});
В этом примере regexPatterns.password
- это просто общий импорт объектов RegExp, а выражение: /^(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&+=*]).*/
Теперь вы можете показать пользователю, если два поля соответствуют до , вы отправляете форму и вызываете любую другую логику, вызовы API или любые дорогостоящие операции.