添加异步角度验证时,如何将同步验证设置为null?

时间:2019-03-28 06:06:16

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

我正在尝试使用异步验证创建控件,但我不希望同步验证:

使用formBuilder创建表单。

  this.myForm = this.fb.group({ 
    someControl: new FormControl(
        "",
        null,
        [this.valueUnique.bind(this)]
      )})

如果我将同步验证参数保持为Validators.required,则不会出现错误。

错误:

  

错误错误:期望的验证程序返回Promise或Observable。       在toObservable(forms.js:603)       在Array.map()       在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)       在FormControl.push ../ node_modules/@angular/forms/fesm5/forms.js.AbstractControl._updateTreeValidity   (forms.js:2523)       在forms.js:2522       在forms.js:3309       在Array.forEach()       在FormGroup.push ../ node_modules/@angular/forms/fesm5/forms.js.FormGroup._forEachChild   (forms.js:3309)

验证器功能:

 /**
   * 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).subscribe(res => {
         {
            if (res && res['data']) {
              resolve({
                unique: true
              });
            }
              else {
                resolve(null);
            }
           }
          },
            err=>
          {
            resolve(null);
          });
    });
  }
  }

1 个答案:

答案 0 :(得分:1)

这个问题有点老了,但也许我的回答可能有用。

我尝试过这种方法,并且有效。

archivos: [null, [] , mimeType],

只有在我将方括号放在同步验证器而不是在异步验证器时才起作用。