首页 > 解决方案 > 需要在异步验证器以角度反应形式运行之前调用服务

问题描述

我正在以反应形式验证一些数据。我已经为一段数据编写了一个异步验证器,以确保提供的数字是数据库中的有效数字。

validateData(control: AbstractControl): Observable<ValidationErrors | null> {
    this.displayName = "";
    if(this.form === undefined) { return of(null)}
    return this.getData().pipe(
      map(result =>  result ? null : {invalidNumber: true})
    );
  }

  getData() : Observable<boolean> {
    if(this.form.get('number') !== null && this.form.get('number').value !== null
      && this.form.get('number').value !== '') {
      return this.service.getData(this.form.get('number').value).pipe(
        map(data => {
        this.data = data;
        return data.id !== null
      }))
    }else{
      return of(true)
    }

问题是我需要在验证发生之前获取数据并将其存储在客户端中。我的限制是我无法在验证过程中存储数据。我试图从输入字段调用 getData() 方法 onBlur ,但异步验证器发生在 onBlur 方法之前,因此数据不存在。有什么想法可以解决这个问题吗?

标签: angulartypescriptrxjsangular-reactive-formsreactive-forms

解决方案


推荐阅读