Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Iterate Angular 2+ FormArray

I have a FormArray and need to iterate through each of its members.

I see there is a get method in the docs, but I don't see where to get the keys, or even the length.

How do I iterate a FormArray?

like image 476
BBaysinger Avatar asked Mar 20 '18 22:03

BBaysinger


3 Answers

You have a property controls in FormArray which is an array of AbstractControl objects. Check the specific documentation for FormArray and you will see they also inherit from AbstractControl like the FormControl you posted.

Be aware that in the controls array you can have again inside FormArray or FormGroup objects besides FormControl objects because there can be nested groups or arrays.

Here is simple example:

for (let control of formArray.controls) {
   if (control instanceof FormControl) {
      // is a FormControl
   }
   if (control instanceof FormGroup) {
      // is a FormGroup  
   }
   if (control instanceof FormArray) {
      // is a FormArray
   }
}
like image 101
AlesD Avatar answered Nov 13 '22 09:11

AlesD


I solved this problem by looping through formArray.controls :

  formArray.controls.forEach((element, index) => {
    ...
  });
like image 20
Ousama Avatar answered Nov 13 '22 09:11

Ousama


If someone needs helps with iterating them in template (like I did), you can do this.

In this case we have FormArray where each child is FormControl

get myRows(): FormControl[] {
    return (this.<your form group>.get('<field name>') as FormArray).controls as FormControl[];
  }

And in template

*ngFor="let row of myRows"
like image 4
O-9 Avatar answered Nov 13 '22 10:11

O-9