In this article, I’d like to showcase the process to create and apply validations in FormArray
What’s a FormArray
A FormArray is responsible for managing a collection of AbstractControl, which can be a FormGroup, a FormControl, or another FormArray. FormArray is one of the three fundamental building blocks used to define forms in Angular, along with FormControl and FormGroup.
Note: for dropdown i have used Angular Syncfusion. please install its package and import the package. you can use any other package also
- let Further see the steps to create a form array
a. Import FormsModule and ReactiveFormsModule in your app.module.ts file.
b. Now in the component file add FormGroup variable like
addMemberItemInputForm = {} as FormGroup;
c. call FormBuilder in the constructor like
private formBuilder: FormBuilder
d. Now initialise form controls by calling it in a function or the constructor like i have used a function called createAddMemberItemInputForm. add the required validations to the controls. here itemDetails is declared a form Array in the below code and i have added a common Validation for form array in which only 5 rows can be added. you can remove or change it.
createAddMemberItemInputForm(){
this.addMemberItemInputForm = this.formBuilder.group({
memberName: ['', Validators.required],
itemType: ['', Validators.required],
itemDetails: this.formBuilder.array(
[this.createEmpFormGroup()],
[Validators.required, Validators.maxLength(5)])
});
}
e. Now i will use getter to binds an object property to a function in the createAddMemberItemInputForm()
memberName object property is bind to a function called get memberName()
get memberName() {
return this.addMemberItemInputForm.get('memberName');
}
f. Like this for every control create a getter function.
g. Now in the form array there is a function called this.createEmpFormGroup()
that is used to initialise the controls in form array like the code bellow
createEmpFormGroup(){
return this.formBuilder.group({
itemName: ['', [Validators.required]],
quantity: ['', [Validators.required, Validators.max(5)]],
price: ['', [Validators.required]]
})
}
h. Now create a add and delete row for form array controls like
addEmployee() {
let newMem = this.createEmpFormGroup();
this.itemDetails.push(newMem);
}
deleteEmployee(i: number) {
this.itemDetails.removeAt(i);
}
i. Coming to the HTML side add the formGroup and formControlName
j. For outer form control add
<div class="col-6">
<label class="form-label">Enter Member Name</label>
<input type="text" class="form-control" placeholder="Member Name" formControlName="memberName">
<label *ngIf="memberName?.invalid && isValidFormSubmitted != null && !isValidFormSubmitted" class="error">
Team name is required.
</label>
</div>
k. For form Array add
<tbody formArrayName="itemDetails">
<tr *ngFor="let item of itemDetails.controls; let i = index" [formGroupName]="i">
<td>
<input type="text" class="form-control" placeholder="Enter Item Name" formControlName="itemName">
<label *ngIf="itemDetails.controls[i].get('itemName')?.errors?.['required'] && isValidFormSubmitted != null && !isValidFormSubmitted" class="error">
Employee name required.
</label>
</td>
<td>
l. Now reaching this step you have almost implemented form array with proper validations.
m. Entire code with live preview is on Github you can refer it.
Code available on GitHub:- [(https://github.com/justinthadathil/AngularFormArray]
Live preview on - [(https://justinthadathil.github.io/Angular_Form_Array/]
Top comments (0)