【问题标题】:async validator (AsyncValidatorFn) is never subscribed to异步验证器 (AsyncValidatorFn) 从未订阅
【发布时间】:2021-03-14 07:25:11
【问题描述】:

我编写了一个自定义表单验证器,但在 errors 它只有 "_isScalar": false, "source": { "_isScalar": false, "source": { "_isScalar": false, "source": {"_isScalar": false}, "operator": {}}, "operator": {"total": 1} 并且表单永远无效。

这是我的验证器:

export function asyncEmailValidator(): AsyncValidatorFn {
  return (control: AbstractControl): Observable<ValidationErrors | null> => {
    return of(control.value).pipe(
      map(res => {
        return res && res.indexOf('example.de') < -1 ? { eMailUnavailable: true } : null;
      }),
      take(1), finalize(() => {})
    );
  };
}

这就是我使用它的方式:

emailFormControl = new FormControl('', [
  Validators.required,
  Validators.email,
  asyncEmailValidator()
]);

通过调试,我发现我检查 example.de 的地图块从未到达,我不明白为什么。在显示内部返回之前使用并输出函数本身。

我在网上的多个示例中看到了这种结构,但它似乎对我不起作用。

我正在使用@angular/forms 10.0.14

【问题讨论】:

    标签: angular angular-reactive-forms angular-forms angular2-form-validation


    【解决方案1】:

    应将异步验证器指定为第三个参数,如下所示:

     new FormControl('', [Validators.required, Validators.email], [asyncEmailValidator()]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-25
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多