У меня проблема с тем, что функция валидатора ожидает возврата обещания.Насколько я понимаю, я создаю пользовательскую функцию проверки, которая проверяет, совпадает ли введенная строка «Новый пароль» со строкой «ConfirmPassword», используя обещание.Вот текущее состояние моего кода:
change-password.component.ts
import { FormBuilder, FormGroup, Validators, AbstractControl } from '@angular/forms';
import { passwordValidator } from './password.validator';
export class ChangePasswordComponent implements OnInit {
form: FormGroup;
constructor(formCreator: FormBuilder) {
this.form = formCreator.group({
oldPassword: ['', [ Validators.required, Validators.minLength(4) ], passwordValidator.isSameOld],
newPassword: ['', [ Validators.required, Validators.minLength(4)] ],
confirmPassword:
['', [ Validators.required, Validators.minLength(4)],
passwordValidator.isSameNew ]
});
}
password.validator.ts
дополнения, сделанные с помощью Хайме
import { AbstractControl, ValidationErrors, FormControl, ValidatorFn } from "@angular/forms";
static isSameNew(formFields: FormGroup) : Promise<ValidationErrors | null>{
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(formFields.get('newPassword'));
if (formFields.get('confirmPassword').value !== formFields.get('newPassword').value) {
console.log(formFields);
resolve({isSameNew: true});
}
else resolve(null);
}, 2000)
});
}
Не могли бы вы помочь мне с отладкой?Я попытался передать newPassword в функцию, написав
confirmPassword:
['', [ Validators.required, Validators.minLength(4)],
passwordValidator.isSameNew(newPassword) ]
, но вскоре обнаружил, что не могу сделать это таким образом, потому что свойство newPassword не определено до тех пор, пока не определен объект формы.Мне нужно использовать обещание, чтобы я мог использовать функцию асинхронного обратного вызова, чтобы задержать сообщение об ошибке «несоответствие пароля» перед тем, как он появится, чтобы не напугать пользователя.
Спасибо огромное за ваше время