【发布时间】:2019-05-05 09:42:42
【问题描述】:
我遇到了一个问题,即验证器函数期望返回一个承诺。据我了解,我正在创建一个自定义验证器函数,该函数使用承诺检查输入的“新密码”字符串是否等于“确认密码”字符串。这是我的代码的当前状态:
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
在 Jaime 的帮助下添加的内容
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 属性。我需要使用一个 Promise,以便我可以使用异步回调函数在“密码不匹配”错误消息出现之前延迟一下,以免吓到用户。
非常感谢您抽出宝贵时间
【问题讨论】:
标签: angular validation promise passwords