【问题标题】:How can we set sync validation null when adding async angular validation?添加异步角度验证时,我们如何将同步验证设置为空?
【发布时间】:2019-08-18 20:10:23
【问题描述】:

我正在尝试创建一个带有异步验证的控件,但我不想要同步验证:

使用 formBuilder 创建表单。

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

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

错误:

ERROR 错误:预期的验证器返回 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);
          });
    });
  }
  }

【问题讨论】:

  • 您确定this.valueUnique.bind(this) 正在返回ObservablePromise?因为帽子是错误所说的,所以您对函数 valueUnique 的绑定没有返回这种类型。
  • @SamVloeberghs 谢谢,是的,我的异步验证器返回承诺。我已经更新了问题。昨天还添加了类似的帖子:stackoverflow.com/questions/55375700/… 如果我添加同步验证 = Validators.required 则不会出现错误。
  • 你的 if 应该在 return new Promise 中。你有一个潜在的情况,你没有返回一个承诺。
  • @SamVloeberghs 好的,谢谢。让我检查一下,我会更新你。
  • @SamVloeberghs 如果条件超出新的承诺,我该如何返回承诺?

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


【解决方案1】:

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

我试过这个方法,效果很好。

archivos: [null, [] , mimeType],

只有当我将方括号用于同步验证器而不将它们用于异步验证器时,它才有效。

【讨论】:

  • 嗨@javier 感谢您发布此信息。下次我会试试这个解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多