【发布时间】:2018-02-08 11:10:03
【问题描述】:
这是example:
constructor(public fb: FormBuilder) {
this.form = this.fb.group({
foobars: this.fb.array([fb.group({ foo: null, bar: null })]),
baz: null
});
const formValues = {
foobars: [
{ foo: 1, bar: 'one'}
{ foo: 2, bar: 'two'}
],
baz: 'baz'
};
this.form.reset(formValues);
}
addFoobar() {
this.form.controls.foobars.push(this.fb.group({ foo: null, bar: null }))
}
还有一个模板:
<div>
<div *ngFor="let foobar of form.controls.foobars.controls">
foo: <input [formControl]="foobar.controls.foo" type="number">
bar: <input [formControl]="foobar.controls.bar">
</div>
baz: {{ form.controls.baz.value }}
<button (click)="addFoobar()">Add foobar</button>
</div>
表单应该有可变数量的foo/bar 控制对。然后将它们作为foobars 数组存储在数据库中并作为普通对象检索(formValues 在本示例中是静态的,但实际上不是)。
问题是reset 不会自动在foobars 表单数组中创建嵌套控件,而我希望它会。
如何在此处使用reset 设置表单值?手动创建 foobar 项目为 fb.group({ foo: ..., bar: ... })]) 是添加/设置嵌套控件的唯一正确方法吗?
【问题讨论】:
-
因为你是在构造函数中设置值,所以标记也不需要重置,你不能用 setValue() 方法代替吗?
-
不能用setValue来设置FormArray,不行。
-
@DeborahK 确实很有趣。该问题看起来相似并且已关闭,但仍然存在。我想我现在就结束这个问题。它可能应该被报告。感谢您的参与。
-
但是,setValue() - 设置 FormArray 的值。它接受与控件结构匹配的数组。我没有说我是对的,但欢迎更多解释
标签: angular typescript angular2-forms angular2-formbuilder