xma*_*tro 3 typescript angular
我正在尝试实现异步自定义验证,我有如下的验证类
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;
}
}
Run Code Online (Sandbox Code Playgroud)
在我的组件中
this.customValidators = new CustomValidators(this._auth_service);
Run Code Online (Sandbox Code Playgroud)
我将它添加到表单控件中
this.emailControl = new Control('',Validators.compose([Validators.required, Validators.pattern(ConfigService.EMAIL_REGEX)]),this.customValidators.usernameTaken);
Run Code Online (Sandbox Code Playgroud)
您可以看到我正在尝试在验证器中注入服务.然后要在我的组件中使用验证器函数,我必须创建验证器的对象并使用它的方法.我已经调试,看到该this._auth_service属性出现undefined在我的验证方法中.它似乎在我的验证器构造函数中填充得很好.
我不想使用验证器作为指令,我理解使注入服务变得容易.
可能是什么问题呢?
看起来你正在失去一个背景.您应该将validator方法显式绑定到验证器实例对象:
this.emailControl = new Control('', Validators.compose([
Validators.required,
Validators.pattern(ConfigService.EMAIL_REGEX)
]), this.customValidators.usernameTaken.bind(this.customValidators));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
930 次 |
| 最近记录: |