Reputation: 32114
I'm using angular 8 with angular material to write my website.
I have a form with formGroup
created and I want to be able to use *ngIf
to check for validation errors by using the actual input element as a parameter.
currently this is my working code:
I have the following form:
<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>
and in the class of the component I implemented the hasError()
function like this:
public hasError = (controlName: string, errorName: string) =>{
return this.queryForm.controls[controlName].hasError(errorName);
}
and of course I configured the queryForm
variable as a group created by form builder.
is there a way to check the error without calling a function from the class itself?
since I added #timezone
to the input field I assumed i will be able to do something like:
<mat-error *ngIf="timezone.hasError('required')">timezone required!</mat-error>
but I can't! :)
I would prefer to use something like that cause I want to create an error handling component with some mat-errors so I will be able to reuse it in each input field and I would like to paste to it the input control instead of the entire form group.
any information regarding this issue would be greatly appreciated.
thanks!
Upvotes: 0
Views: 1137
Reputation: 57939
you know that if the field has a unique validator, you can use simply
<mat-error>timezone required!</mat-error>
(the *ngIf is not necesary).
if you want has a big control of errors, you can has some like
<mat-error >{{getError('timezone')}}</mat-error>
and you has a function like
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;
}
Upvotes: 1