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)