Пользовательский валидатор Ionic 3 не работает должным образом - PullRequest
0 голосов
/ 14 октября 2018

Я пытаюсь создать собственный валидатор (Ionic 3 + Angular 6), используя провайдера (бэкэнд NodeJS).Целью Валидатора является проверка уникальности псевдо.

Код Валидатора:

import { AbstractControl, ValidatorFn } from '@angular/forms';
import { RemoteDataServiceProvider } from './../../providers/remote-data-service/remote-data-service';

export class UserNameValidator {
  public static alreadyExists(
    remoteDataService: RemoteDataServiceProvider,
    validatorField: { [key: string]: boolean }
  ): ValidatorFn {
    return (control: AbstractControl): { [key: string]: boolean } | null => {
      if (control.value !== undefined || control.value !== null) {
        remoteDataService.checkPseudo(control.value)
          .subscribe((response: any) => {
            if (response.status === 200) {
              return null;
            } else {
              return validatorField
            }
          }, (error) => {
            return validatorField;
          });
       }
      return validatorField;
    }
  }
}

Предполагая, что бэкэнд выполняет свою работу, я получаю 200, когда псевдопри условии, что все в порядке, но, на мой взгляд, всегда было сообщение, в котором упоминалось, что есть пользователь, у которого есть это псевдо.

Кусок HTML:

    <ion-item>
  <ion-label floating color="primary">{{ 'account.forms.pseudo' | translate }}</ion-label>
  <ion-input type="text" formControlName="userName" class="form-control" required></ion-input>
</ion-item>
<div class="validation-errors">
  <ng-container *ngFor="let validation of validationMessages.userName">
    <div class="error-message" *ngIf="userName.hasError(validation.type) && (userName.dirty || userName.touched)">
      {{ validation.message }}
    </div>
  </ng-container>
</div>

И в TS:

     this.signupForm = this.formBuilder.group({
     userName: [
       this._account.userName,
      [
        Validators.required,
        UserNameValidator.alreadyExists(this.remoteDataService, {alreadyExists: true}),
        Validators.minLength(5),
        Validators.maxLength(25),
        Validators.pattern('^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]+$')
      ]
    ],
...

Я думаю, что я что-то упустил в этом коде, но не вижу его ...

Есть идеи?

С уважением

...