gpt4 book ai didi

typescript - Angular 2 异步自定义验证器

转载 作者:太空狗 更新时间:2023-10-29 18:09:09 26 4
gpt4 key购买 nike

我正在尝试实现异步自定义验证,我有如下验证类

export class CustomValidators{
_auth_service;
constructor(auth_service:AuthService){
this._auth_service = auth_service;
}

usernameTaken(control: Control) {
console.log(this._auth_service);
let q = new Promise<ValidationResult>((resolve, reject) => {
this._auth_service.emailtaken('email='+control.value).subscribe(data=>{
var result = data.json().result;
console.log(result);
if(result===true){
resolve({"usernameTaken": data});
}else{
resolve(null);
}
});
});
return q;
}

}

在我的组件中

this.customValidators = new CustomValidators(this._auth_service);

我将它添加到表单控件中

this.emailControl = new Control('',Validators.compose([Validators.required, Validators.pattern(ConfigService.EMAIL_REGEX)]),this.customValidators.usernameTaken); 

你可以看到我正试图在我的验证器中注入(inject)一个服务。然后要在我的组件中使用验证器函数,我必须创建一个验证器对象并使用它的方法。我进行了调试,发现 this._auth_service 属性在我的验证器方法中出现了 undefined。它似乎在我的验证器构造函数中填充得很好。

我不想使用验证器作为指令,我知道这使得注入(inject)服务变得容易。

可能是什么问题?

最佳答案

看起来您正在失去上下文。您应该将验证器方法显式绑定(bind)到验证器实例对象:

this.emailControl = new Control('', Validators.compose([
Validators.required,
Validators.pattern(ConfigService.EMAIL_REGEX)
]), this.customValidators.usernameTaken.bind(this.customValidators));

关于typescript - Angular 2 异步自定义验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36740177/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com