У меня есть форма:
this.changePasswordForm = this.formBuilder.group({
'passwordNew': ['', ValidationService.passwordValidator], matchingPasswords('passwordNew', 'passwordNewConfirmation')(this)]]
});
И моя настраиваемая функция проверки, которую я пытаюсь вызвать:
export function matchingPasswords(passwordKey: string, confirmPasswordKey: string) {
return (group: FormGroup): {
[key: string]: any
} => {
let password = group.controls[passwordKey];
let confirmPassword = group.controls[confirmPasswordKey];
if (password.value !== confirmPassword.value) {
return {
mismatchedPasswords: true
};
}
}
}
Как передать текущую форму внутри matchingPasswords? Пробовал использовать this:
'passwordNewConfirmation')(this)





Функция ValidatorFn принимает текущий элемент управления в качестве аргумента. Вы можете использовать это для доступа к группе форм.
export interface ValidatorFn {
(c: AbstractControl): ValidationErrors | null;
}
и ваша функция будет выглядеть так:
export function matchingPasswords(passwordKey: string, confirmPasswordKey: string) {
return (control: AbstractControl): {
[key: string]: any
} => {
if (!control.parent){
return null;
}
let group = control.parent;
let password = group.controls[passwordKey];
let confirmPassword = group.controls[confirmPasswordKey];
if (password.value !== confirmPassword.value) {
return {
mismatchedPasswords: true
};
}
}
}
При регистрации this не понадобится:
this.changePasswordForm = this.formBuilder.group({
'passwordNew': ['', [ValidationService.passwordValidator, matchingPasswords('passwordNew', 'passwordNewConfirmation')]]
});
Извините, это должен быть AbstractControl. Обновлено.
Я получаю эту ошибку: ERROR Error: Expected validator to return Promise or Observable.
В импорте нет
AbstractFormControl, толькоAbstractControl