【发布时间】:2021-08-26 01:15:46
【问题描述】:
在我的 Angular 应用程序中尝试在表单数组中添加一个带有两个表单控件的动态表单组,我怎样才能在此处动态添加表单控件?我试图以这种方式添加[formControlName]="i",但得到了Cannot find control with path: 'dinings -> 0 -> 0'。
如果我静态添加 formControlName="name" 和 formControlName="cuisine" 未收到错误但添加后表单控件中的值未更新。
这就是我所做的-
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;
}
【问题讨论】:
标签: angular angular-reactive-forms formarray