Bird
Raised Fist0
Angularframework~10 mins

FormArray for dynamic fields in Angular - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - FormArray for dynamic fields
Create FormArray
↓
Add FormControls dynamically
↓
Render form fields for each control
↓
User inputs data
↓
FormArray updates values
↓
Optionally remove controls
↓
Submit form with dynamic data
This flow shows how Angular creates a FormArray, adds controls dynamically, updates values on user input, and handles form submission.
Execution Sample
Angular
this.form = new FormGroup({
  items: new FormArray([])
});

addItem() {
  (this.form.get('items') as FormArray).push(new FormControl(''));
}
This code creates a FormArray inside a FormGroup and adds empty FormControls dynamically.
Execution Table
StepActionFormArray LengthFormArray ValuesRendered Fields Count
1Initialize FormArray with empty array0[]0
2Call addItem()1['']1
3Call addItem() again2['', '']2
4User types 'A' in first field2['A', '']2
5User types 'B' in second field2['A', 'B']2
6Call removeAt(0)1['B']1
7Submit form1['B']1
💡 Form submitted with current FormArray values; dynamic fields managed by add/remove.
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 4After Step 5After Step 6Final
formArray.length0122211
formArray.value[]['']['', '']['A', '']['A', 'B']['B']['B']
renderedFieldsCount0122211
Key Moments - 3 Insights
Why does the FormArray length increase when addItem() is called?
Each addItem() pushes a new FormControl into the FormArray, increasing its length as shown in steps 2 and 3 of the execution_table.
What happens to the FormArray values when a user types in a field?
The FormArray values update automatically to reflect user input, as seen in steps 4 and 5 where values change from ['', ''] to ['A', 'B'].
How does removing a control affect the FormArray and rendered fields?
Removing a control reduces the FormArray length and removes the corresponding field from the UI, demonstrated in step 6 where length drops from 2 to 1.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the FormArray length after the second addItem() call?
A1
B0
C2
D3
💡 Hint
Check step 3 in the execution_table where addItem() is called the second time.
At which step does the FormArray value change to ['A', '']?
AStep 4
BStep 3
CStep 5
DStep 6
💡 Hint
Look at the value column in the execution_table for the first user input.
If we remove the first control at step 6, what happens to the rendered fields count?
AIt stays the same
BIt decreases
CIt increases
DIt resets to zero
💡 Hint
Refer to step 6 in the execution_table and variable_tracker for renderedFieldsCount.
Concept Snapshot
FormArray holds a dynamic list of FormControls.
Use push() to add controls and removeAt() to remove.
FormArray updates values as user types.
Render fields by looping over FormArray controls.
Submit form to get all dynamic values together.
Full Transcript
This visual trace shows how Angular's FormArray manages dynamic form fields. We start with an empty FormArray inside a FormGroup. Each addItem() call adds a new FormControl, increasing the FormArray length and rendering a new input field. When the user types, the FormArray values update automatically. Removing a control reduces the length and removes the field from the UI. Finally, submitting the form collects all current values from the FormArray. This step-by-step helps beginners see how dynamic fields are created, updated, and removed in Angular forms.

Practice

(1/5)
1. What is the main purpose of FormArray in Angular forms?
easy
A. To manage a dynamic list of form controls that can grow or shrink
B. To create a single form control with a fixed value
C. To style form inputs dynamically
D. To handle form submission events

Solution

  1. Step 1: Understand what FormArray does

    FormArray is designed to hold multiple form controls dynamically, allowing adding or removing controls as needed.
  2. Step 2: Compare options

    Only To manage a dynamic list of form controls that can grow or shrink correctly describes this dynamic list management. Others describe unrelated features.
  3. Final Answer:

    To manage a dynamic list of form controls that can grow or shrink -> Option A
  4. Quick Check:

    FormArray = dynamic list of controls [OK]
Hint: FormArray is for lists of controls, not single controls [OK]
Common Mistakes:
  • Confusing FormArray with FormControl
  • Thinking FormArray handles styling
  • Assuming FormArray manages form submission
2. Which of the following is the correct way to add a new control to a FormArray named emails?
easy
A. emails.insertControl(new FormControl(''))
B. emails.addControl(new FormControl(''))
C. emails.push(new FormControl(''))
D. emails.appendControl(new FormControl(''))

Solution

  1. Step 1: Recall FormArray methods

    The method to add a control to FormArray is push().
  2. Step 2: Check each option

    Only emails.push(new FormControl('')) uses push() correctly. Others are invalid methods for FormArray.
  3. Final Answer:

    emails.push(new FormControl('')) -> Option C
  4. Quick Check:

    Use push() to add control [OK]
Hint: Use push() to add controls to FormArray [OK]
Common Mistakes:
  • Using addControl() which is for FormGroup
  • Trying appendControl() or insertControl() which don't exist
  • Confusing FormArray with FormGroup methods
3. Given this code snippet, what will be the length of the FormArray after execution?
const tags = new FormArray([]);
tags.push(new FormControl('angular'));
tags.push(new FormControl('typescript'));
tags.removeAt(0);
medium
A. 1
B. 2
C. 0
D. 3

Solution

  1. Step 1: Track push operations

    Two controls are added, so length becomes 2.
  2. Step 2: Apply removeAt(0)

    The first control is removed, reducing length by 1.
  3. Final Answer:

    1 -> Option A
  4. Quick Check:

    2 added - 1 removed = 1 [OK]
Hint: Count pushes minus removes for length [OK]
Common Mistakes:
  • Forgetting removeAt reduces length
  • Assuming removeAt(0) removes last item
  • Counting pushes only without removals
4. Identify the error in this code snippet that tries to remove a control from a FormArray named phones:
phones.remove(1);
medium
A. remove() requires a FormControl argument, not an index
B. No error; remove() works fine
C. remove() should be called with a string index
D. remove() is not a method of FormArray; should use removeAt()

Solution

  1. Step 1: Check FormArray removal methods

    FormArray uses removeAt(index) to remove controls by position.
  2. Step 2: Analyze the code

    Calling remove(1) is invalid because remove is not a FormArray method.
  3. Final Answer:

    remove() is not a method of FormArray; should use removeAt() -> Option D
  4. Quick Check:

    Use removeAt() to remove by index [OK]
Hint: Use removeAt() to remove by index, not remove() [OK]
Common Mistakes:
  • Using remove() instead of removeAt()
  • Passing wrong argument types to removal methods
  • Assuming remove() exists on FormArray
5. You want to create a form where users can add multiple email addresses dynamically. Which approach correctly initializes the FormArray and adds a new empty email control when a button is clicked?
hard
A. Initialize with new FormGroup([]) and add with emails.push('')
B. Initialize with new FormArray([]) and add with emails.push(new FormControl(''))
C. Initialize with new FormControl([]) and add with emails.addControl(new FormControl(''))
D. Initialize with new FormArray(['']) and add with emails.insertControl(new FormControl(''))

Solution

  1. Step 1: Correct initialization of FormArray

    FormArray should be initialized with an empty array: new FormArray([]).
  2. Step 2: Adding new controls properly

    Use push(new FormControl('')) to add a new empty control dynamically.
  3. Final Answer:

    Initialize with new FormArray([]) and add with emails.push(new FormControl('')) -> Option B
  4. Quick Check:

    FormArray + push(new FormControl('')) = dynamic emails [OK]
Hint: Use FormArray([]) and push(new FormControl('')) to add fields [OK]
Common Mistakes:
  • Using FormControl instead of FormArray for multiple inputs
  • Trying to add controls with addControl() on FormArray
  • Initializing FormArray with values instead of controls
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard