I am showing reactive form error messages as per the suggested approach of angular angular form validation error example.
html code of showing error on the page:
<div [formGroup]="myForm">
<div>
<input type="text" formControlName="firstName"/>
<div *ngIf="myForm.controls.firstName.invalid"
class="alert alert-danger">
<div *ngIf="myForm.controls.firstName.errors.required">
This Field is Required.
</div>
<div *ngIf="myForm.controls.firstName.errors.maxlength">
your can enter only 50 characters
</div>
</div>
</div>
<div>
<input type="text" formControlName="lastName"/>
<div *ngIf="myForm.controls.lastName.invalid"
class="alert alert-danger">
<div *ngIf="myForm.controls.lastName.errors.required">
This Field is Required.
</div>
<div *ngIf="myForm.controls.lastName.errors.maxlength">
your can enter only 50 characters
</div>
</div>
</div>
</div>
Just for the reference of my component code below :
this.myForm = this.formBuilder.group({
firstName:['',[Validators.required,Validators.maxLength(50)]],
lastName:['',[Validators.required,Validators.maxLength(50)]]
})
If you see the above code, I have applied two validation on my firstName and lastName field.
For showing error message, I have written multiple *ngIf condition to show the error message.
Is there any best way to show the validation message of particular control without writing multiple *ngIf condition ?, because the same code I am writing again and again with different control name and validator name for showing error message.
I would suggest to have a component called print-error
which can handle any kind of OOTB or Custom errors.
You can handle as many as errors you want.
import {Component, Input} from '@angular/core';
@Component({
selector: 'print-error',
templateUrl: './print-error.component.html',
providers: []
})
export class PrintError {
@Input("control")
control: any;
}
<div class="text-danger" *ngIf="control && control.errors && (control.dirty || control.touched)">
<div *ngIf="control.errors.required"><small>This field is required</small></div>
<div *ngIf="control.errors.unique"><small>{{control.errors.unique}}</small></div>
<div *ngIf="control.errors.lessThen"><small>{{control.errors.lessThen}}</small></div>
<div *ngIf="control.errors.greaterThan"><small>{{control.errors.greaterThan}}</small></div>
<div *ngIf="control.errors.email"><small>{{control.errors.email}}</small></div>
<div *ngIf="control.errors.mobile"><small>{{control.errors.mobile}}</small></div>
<div *ngIf="control.errors.confirmPassword"><small>{{control.errors.confirmPassword}}</small></div>
</div>
<label for="folder-name">Email</label>
<input name="email" required emailValidator #email="ngModel" [(ngModel)]="user.email">
<print-error [control]="email"></print-error>