【发布时间】:2021-05-21 09:16:25
【问题描述】:
我的表单结构如下..
this.myForm = this.formBuilder.group({
control1: this.formBuilder.control({value: ''}),
groupcontrol1: this.formBuilder.array({ this.addGroupControl() });
});
addGroupControl(): FormGroup {
return this.formBuilder.group({
recurringControl1: this.formBuilder.control({value: ''}),
recurringControl2: this.formBuilder.control({value: ''}),
recurringControl3: this.formBuilder.control({value: ''}),
});
});
我在 html 中有一个按钮,可以将组添加到这个数组中,看起来像这样
addGroups() {
(<FormArray>this.myForm.get('groupcontrol1')).push(this.addGroupControl());
}
这是我的html表单
<form [formGroup]="myForm" (ngSubmit)="onSubmit()">
<label> control1 </label>
<input type="text"/>
<button type="button" (click)="addGroups()"> Add Groups</button>
<accordion>
<accordion-group formArrayName="groupcontrol1"
*ngFor="let group of myForm.get('groupcontrol1').controls; let i = index">
<div accordion-heading>
Group Control {{ i + 1 }}
</div>
<div [formGroup]="i">
<input formControlName="recurringControl1" />
<input formControlName="recurringControl2" />
<input formControlName="recurringControl3" />
</div>
</accordion-group>
</accordion>
</form>
现在对于每个循环控件,我需要通知哪个循环控件值以哪种形式更改,为此我使用下面的代码
merge(
...this.myForm
.get('groupcontrol1')
.controls.map((eachGroup, index: number) =>
eachGroup.controls.recurringControl1.valueChanges
.pipe(map((value) => ({ rowIndex: index, control: eachGroup, data: value })))
)
).subscribe((changes) => {
console.log(changes);
});
使用上面的代码,我得到了recurringControl1 从第一个表单 grous 的值变化,而不是其他表单组。
基本上只有当行索引为 0 时,才获取该值
对上述代码的任何修改或建议,以准确获取 3 个循环控件值中的哪个控件已更改
【问题讨论】:
-
你能创建一个 stackblizz 来重现吗?
标签: javascript angular typescript rxjs angular-forms