Angular 角度反应式表单自定义异步验证程序,处理http错误
我有一个异步验证器,它通过http调用进行后端验证。需要处理http调用失败,但找不到任何方法来捕获。任何帮助找出正确的设置将不胜感激。下面是我当前的设置 窗体控件Angular 角度反应式表单自定义异步验证程序,处理http错误,angular,validation,angular-reactive-forms,Angular,Validation,Angular Reactive Forms,我有一个异步验证器,它通过http调用进行后端验证。需要处理http调用失败,但找不到任何方法来捕获。任何帮助找出正确的设置将不胜感激。下面是我当前的设置 窗体控件 this.email = new FormControl('', { validators: [ Validators.email, Validators.required, Validators.maxLength(100) ) ], asyncValidators: this.chec
this.email = new FormControl('', {
validators: [
Validators.email,
Validators.required,
Validators.maxLength(100)
)
],
asyncValidators: this.checkEmail.bind(this),
updateOn: 'blur'
});
我的异步验证器
checkEmail(control: AbstractControl) {
return this.emailService.checkEmail(control.value).map(res => {
if (this.res.invalid) {
return {email: true};
}
return null;
});
}
服务层中的http调用
public checkEmail(email: string): Observable<any> {
if (emailAddress) {
return this.http.get(environment.API_URL + 'register/checkEmail?email=' + emailAddress);
} else {
return empty();
}
}
公开检查电子邮件(电子邮件:字符串):可观察{
如果(电子邮件地址){
返回此.http.get(environment.API_URL+'register/checkEmail?email='+emailAddress);
}否则{
返回空();
}
}
检查电子邮件(…)。捕获(…)
?该捕获在哪里?服务水平?这不起作用,需要一个可观察的返回,验证器级别也不起作用。另外,这取决于您是否在其他地方和出于其他目的使用服务方法。是的,catch回调返回一个可观察的,例如“代码>可观察到的({电子邮件:真})< /代码>。如果您考虑失败的请求,验证失败(希望这应该是在验证器中完成的)。我不确定您的意思,我尝试修改服务调用以赶上最后,我得到,TS2339:类型“Observable”上不存在属性“catch”。我必须导入catch,导入“rxjs/add/operator/catch”;谢谢,带我走上了正确的道路