我正在使用反应式表单。我有2组数据。它们是:
这是我想要做的:
问题总结:
我正在尝试修复表单的(上面的)关联行为,以便每个表单在循环中应独立于另一个表单工作,并且在选择一个组后,当“ Assign Group”单击按钮后,我试图仅访问已提交表单的相应项目ID和组ID,而不访问其他表单。如何实现?
问题的实时演示:
我已经设置了复制问题的StackBlitz demo here。
实时演示编辑代码:
您在模板内部使用的循环正在使用相同的FormControl创建多个表单。有两种方法可以解决此问题,一种方法是使用FormArray,但我认为使用item_id
属性作为FormControl id是最简单的方法,您可以使用form.controls[id]
form: FormGroup = new FormGroup({});
allData = [
{
"item_name": "Test 1",
"item_id": "1",
},
{
"item_name": "Test 2",
"item_id": "2",
},
{
"item_name": "Test 3",
"item_id": "3",
},
{
"item_name": "Test 4",
"item_id": "4",
},
{
"item_name": "Test 5",
"item_id": "5",
},
];
allDataGroups = [
{
"display_name": "Group 1",
"group_id": "1",
},
{
"display_name": "Group 2",
"group_id": "2",
},
{
"display_name": "Group 3",
"group_id": "3",
}
];
constructor() {
this.createFormControls()
}
private createFormControls() {
for (const datum of this.allData) {
const id = datum.item_id;
this.form.addControl(id, new FormControl())
}
}
<div class="container">
<form [formGroup]="form">
<div *ngFor="let datum of allData">
<span>{{ datum.item_name }} / Item ID #{{ datum.item_id }}</span>
<select style="display: block" [formControlName]="datum.item_id">
<option *ngFor="let group of allDataGroups" [value]="group.group_id">
{{ group.display_name }}
</option>
</select>
<button>Assign Group</button>
</div>
</form>
</div>