【发布时间】:2017-11-21 18:14:30
【问题描述】:
我有以下“三级”嵌套形式: FormGroup->ArrayOfFormGroups->FormGroup
顶级(myForm):
this.fb.group({
name: '',
description: '',
questions: this.fb.array([])
});
“问题”的嵌套表单数组元素:
this.fb.group({
priority: ['1'],
params: this.fb.group({parameter: ['']})
});
'params' 的嵌套表单组元素是一个随机长度的 key:value 对象。
我正在使用以下 ngFor 来遍历元素:
<tr *ngFor="let questionConfigForm of myForm.controls.questions.controls; let i=index" [formGroupName]="i">
...
<div *ngFor="let param of objectKeys(questionConfigForm.controls.params.controls)" formGroupName="params">
<input type="text" [formControlName]="param">
我有以下行为: 当我更新前两个表单级别上的任何字段时,我可以立即看到相应表单控件值的变化 {{myForm.value | json}}。 但是,如果我在“params”控件之一中输入某些内容,我看不到 myForm 值的任何更改,但是如果我将对相应的“问题”表单进行任何更改,“params”控件的表单数据将被更新。
对我来说,“param”表单控件看起来像接收输入数据,但没有触发一些更新事件,我不知道如何解决这个问题,除了编写我自己的函数来响应(更改)和 patchValue形式上..
所以我的问题是如何让“参数”控件更新 myForm 而不会出现这种奇怪的行为?
更新:
initQuestionConfig() {
return this.fb.group({
priority: ['1'],
params: this.fb.group({parameter: ['']}),
});
}
addQuestionConfig() {
const control = <FormArray>this.myForm.controls['questions'];
const newQuestionCfg = this.initQuestionConfig();
control.push(newQuestionCfg);
}
【问题讨论】:
-
您能否发布代码,说明如何将问题组添加到顶级表单的问题数组?
-
@MilanRaval 添加到 UPD 部分
-
这里的 params 不是一个单独的控件,你是不是想用 INPUT 绑定它?
-
我正在使用:*ngFor="let param of objectKeys(questionConfigForm.controls.params.controls)" 将它们绑定到输入
-
尝试为 formControlName 添加 {{}},即 [formControlName]="{{param}}"
标签: javascript angular typescript nested-forms angular-reactive-forms