如何添加异步验证而不添加任何其他验证器?

时间:2019-03-27 11:05:44

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

我正在使用7号角反应形式。

我需要检查服务器上特定值的存在,以使字段有效/无效。

组件类:

控制:

  valueControl = new FormControl("" ,Validators.required,
  ), [this.valueIsUnique.bind(this)]);



  /**
   * Validator to checking existance/uniqueness
   * of entered value
   * @param control
   */
   valueIsUnique(control: AbstractControl): Promise<ValidationErrors|null> | null {
    if (control && (control.value !== null && control.value !== undefined)) {
      return new Promise((resolve, reject) => {
        this.service.checkValueExists(control.value, this.organizationId).subscribe(res => {
         {
            if (res && res['data']) {
              resolve({
                unique: true
              });
            }
              else {
                resolve(null);
            }
           }
          },
            err=>
          {
            resolve(null);
          });
    });
  }
  }



**Service:**

  checkValueExists(value:string) {
     return this._http.get(`${API}/${value}/exists`, {
      headers: ...
    }
    );
  }

现在可以正常工作了。 但是我不想强制执行控制,即Validators.required。因此,作为一种黑客,我添加了Validators.minLength(1)作为同步验证,但这会产生错误:

  

错误错误:期望的验证程序返回Promise或Observable。       在toObservable(forms.js:603)       在Array.map()       在forms.js:591       在forms.js:611       在Array.map()       在_executeAsyncValidators(forms.js:611)       在FormControl.asyncValidator(forms.js:591)       在FormControl.push ../ node_modules/@angular/forms/fesm5/forms.js.AbstractControl._runAsyncValidator   (forms.js:2535)       在FormControl.push ../ node_modules/@angular/forms/fesm5/forms.js.AbstractControl.updateValueAndValidity   (forms.js:2508)       在FormControlDirective.push ../ node_modules/@angular/forms/fesm5/forms.js.FormControlDirective.ngOnChanges   (forms.js:4463)

是否可以添加异步验证而不必将同步验证添加为第二个参数:

取自this SO ques/ans的参考

0 个答案:

没有答案