Я пытаюсь создать собственный валидатор (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]+$')
]
],
...
Я думаю, что я что-то упустил в этом коде, но не вижу его ...
Есть идеи?
С уважением