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

Я использую угловой 8 с угловым материалом, чтобы написать свой сайт.

У меня есть форма с formGroup создан и я хочу иметь возможность использовать *ngIf проверить наличие ошибок проверки, используя фактический элемент ввода в качестве параметра.

В настоящее время это мой рабочий код:

У меня есть следующая форма:

<form [formGroup]="queryForm" (submit)="runQuery()">
...
  <mat-form-field>
            <input matInput #timezone placeholder="Timezone" aria-label="Timezone" formControlName="timePeriodTimeZone"/>
            <mat-hint>timezone as a number</mat-hint>
            <mat-error *ngIf="hasError('timePeriodTimeZone','required')">timezone required</mat-error>
        </mat-form-field>
...
</form>

и в классе компонента я реализовал hasError() функционировать так:

 public hasError = (controlName: string, errorName: string) =>{
    return this.queryForm.controls[controlName].hasError(errorName);
  }

и конечно я настроил queryForm переменная как группа, созданная построителем форм.

Есть ли способ проверить ошибку, не вызывая функцию из самого класса?

так как я добавил #timezone в поле ввода я предположил, что смогу сделать что-то вроде:

<mat-error *ngIf="timezone.hasError('required')">timezone required!</mat-error>

но я не могу!:)

Я предпочел бы использовать что-то подобное, потому что я хочу создать компонент обработки ошибок с некоторыми ошибками mat, чтобы я мог повторно использовать его в каждом поле ввода и хотел бы вставить в него элемент управления вводом вместо всей формы группа.

любая информация по этому вопросу будет принята с благодарностью.

Спасибо!

1 ответ

Решение

Вы знаете, что если поле имеет уникальный валидатор, вы можете просто использовать

<mat-error>timezone required!</mat-error>

(*ngIf не является необходимым).

если вы хотите иметь большой контроль над ошибками, вы можете иметь некоторые как

<mat-error >{{getError('timezone')}}</mat-error>

и у вас есть функция, как

getError(field:string)
{
   const control=this.myForm.get(field);
   string error=''
   switch (field)
    case 'timezone':
       error=control.hasError('required')?'time zone required':
              control.hasError('other')?' other error':''
    break;
    case '....'
   }
   return error;
}
Другие вопросы по тегам