In my angular app trying to add a dynamic form group with two form controls in the form array, how can I be able to add form controls dynamically in here? I have tried to add like this way [formControlName]="i"
but getting this Cannot find control with path: 'dinings -> 0 -> 0'
.
If I add statically formControlName="name"
and formControlName="cuisine"
not getting the error but values in formcontrols are not updating after addition.
This is what I have done -
HTML
<div>
<form [formGroup]="diningForm" (ngSubmit)="addDiningDetails()">
....
<div class="added-dining-list">
<ul>
<li formArrayName="dinings" *ngFor="let dining of dinings;let i = index">
<div [formGroupName]="i">
<input type="text" class="form-input" placeholder="Dining Name" [formControlName]="i" />
<input type="text" class="form-input" placeholder="Dining Cuisine" [formControlName]="i" />
<a href="#">Delete</a>
</div>
</li>
<li>
<form [formGroup]="diningInfoForm" class="dining-info-form">
<input type="text" class="form-input" formControlName="diningName"/>
<input type="text" class="form-input" formControlName="diningCuisine"/>
<a href="#" (click)="addDining($event)">Add Dining</a>
</form>
</li>
</ul>
</div>
</form>
TS
ngOnInit(){
//Dining Form
this.diningForm = this._formBuilder.group({
isOfferingDining: new FormControl('', [Validators.required]),
dinings: this._formBuilder.array([]),
diningInfo: new FormControl('')
});
//Dining info add form
this.diningInfoForm = this._formBuilder.group({
diningName: new FormControl('', [Validators.required]),
diningCuisine: new FormControl('', [Validators.required])
});
}
//Adding single dining in form array
addDiningMenu(event: MouseEvent) {
event.preventDefault();
if (this.diningInfoForm.invalid) {
this.showErrorMessages();
}
const formValue = this.diningInfoForm.value;
const formGroup = this._formBuilder.group({
name: new FormControl(formValue.diningName, [Validators.required]),
cuisine: new FormControl(formValue.diningCuisine, [Validators.required])
});
this.dinings.push(formGroup);
}
//Final Submit of the form
addDiningDetails() {
this._messageService.clear();
if (this.diningForm.invalid) {
this.showErrorMessages();
return;
}
console.log(this.diningForm.value);
}
//Getting form array
get dinings() {
return (this.diningForm.get('dinings') as FormArray).controls;
}