Angular 4 Custom Validator ngIf не отображает ошибку <span>

Я создал 2 пользовательских валидатора форм, они оба работают, но сообщение не отображается, когда я использую условие ngIf в шаблоне. Однако для встроенных валидаторов сообщения отображаются. Оба этих валидатора зарегистрированы в компоненте, и в консоли нет ошибок.

Компонент шаблона:

<label for="username">Username</label>
<input formControlName='username' type="text" id="username" class="form-control">
<div *ngIf="username.touched && username.invalid">
   <span class="text-danger" *ngIf='username.errors.required'>Username is required</span>
   <span class="text-danger" *ngIf="username.errors.minlength">Username should be min {{ username.errors.minlength.requiredLength }} characters</span>
   <span class="text-danger" *ngIf='username.errors.cannotHaveSpace'>Username can't have space (Custom Validation)</span>
   <span class="text-danger" *ngIf="username.errors.shouldBeUnique">Username is already taken (Custom Validation)</span>
</div>

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

static cannotHaveSpace(control: AbstractControl) : ValidationErrors | null{
  if((control.value as string).indexOf(' ')>=0)
  return {cantHaveSpace: true}; 
  return null;
}
static shouldBeUnique(control: AbstractControl): Promise< ValidationErrors | null >{
  return new Promise((resolve,reject)=>{
    setTimeout(()=>{
        if(control.value=='Saad')
            resolve({shouldbeUniqe:true});
       else resolve(null);
    },2000) 
  });
}

1 ответ

Решение

У вас есть опечатки...

*ngIf="username.errors.cannotHaveSpace"
*ngIf="username.errors.shouldBeUnique"

должно быть...

*ngIf="username.errors.cantHaveSpace"
*ngIf="username.errors.shouldbeUniqe"

Не показывая свой код TS, но также убедитесь, что асинхронный валидатор помечен как третий аргумент в своем собственном массиве:)

Другие вопросы по тегам