you should use FormArray,First, on top of your other form imports, you’ll want to import FormArray from the Angular forms module:
app.component.ts
import { FormBuilder, FormGroup, FormArray } from '@angular/forms';
signUpForm: FormGroup;
items: FormArray ;
ngOnInit() {
this.signUpForm = this.formBuilder.group({
formName: '',
formDescription: '',
items: this.formBuilder.array([ this.createItem() ])
});
this.addItem()
this.addItem();
}
createItem(): FormGroup {
return this.formBuilder.group({
field1: '',
field2: ''
});
}
addItem(): void {
this.items = this.signUpForm.get('items') as FormArray;
this.items.push(this.createItem());
}
in html:
<div formArrayName="items"
*ngFor="let item of signUpForm.get('items').controls; let i = index;">
<div [formGroupName]="i">
<input formControlName="field1" placeholder="field1">
<input formControlName="field2" placeholder="field1">
</div>
</div>
Now it’s as simple as calling our addItem
method in our template when the user clicks to add a new item or do it in our component.