Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度反应式表单自定义异步验证程序,处理http错误_Angular_Validation_Angular Reactive Forms - Fatal编程技术网

Angular 角度反应式表单自定义异步验证程序,处理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

我有一个异步验证器,它通过http调用进行后端验证。需要处理http调用失败,但找不到任何方法来捕获。任何帮助找出正确的设置将不胜感激。下面是我当前的设置

窗体控件

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”;谢谢,带我走上了正确的道路