Как добавить асинхронную проверку без добавления других валидаторов? - PullRequest
0 голосов
/ 27 марта 2019

Я использую угловой 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 () at forms.js: 591 at forms.js: 611 в Array.map () в _executeAsyncValidators (forms.js: 611) в FormControl.asyncValidator (forms.js: 591) at FormControl.push ../ node_modules/@angular/forms/fesm5/forms.js.AbstractControl._runAsyncValidator (forms.js: 2535) at 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)

Есть ли способ добавить асинхронную проверку без добавления проверки синхронизации в качестве второго параметра:

Взял ссылку от этого ТАК / вопроса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...