我希望formArray
在用户在创建的空控件中添加值后更新 a 。
formArray
目前,当用户选择添加一个新项目时,我使用空值构建。
buildItem(item?: any, key?: any): FormGroup {
// Item will pass undefined for initial buildItem in onLoad and new items
let itemName: string;
let keyValue: string;
if (item === undefined) {
itemName = ''; key = '' }
else {
itemName = item.name; keyValue = key
};
/**
* Builds a single item for form group array in the collectionForm.
*/
return this.formBuilder.group({
item: [itemName || '', Validators.required],
properties: { item, key: key } || {} });
}
这适用于初始创建和更新已添加的项目。问题在于添加了空值的新项目。当我添加一个新项目时,我需要在properties.key
在保存该新项目的方法中,我添加了一个patchValue
this.items.patchValue([{
// item being returned from firebase promise
item: item.name,
properties: { item: item.name, key: item.$key' }
}]);
但是,patchValue
它根本不起作用。当我尝试更新该新值时,尽管这些值已保存到 firebase,但我仍然会返回值为空的值或在初始值上设置的保存值,BuildItem()
而不是在patchValue
我在角度FormArray
文档中看到
它接受一个与控件结构相匹配的数组,并将尽最大努力将值与组中的正确控件相匹配。参考
这是否意味着它可能会也可能不会更新该值..它会尽力尝试?我想如果我可以为我想要修补的值添加索引,那么它根本不应该是一个问题。喜欢removeAt(idx)
所以如果我能写出类似的东西
this.form.patchValue.atIndex(this.idx,[{
item: item.name,
properties: { item: item.name, key: item.$key' }
}];
但不确定我能做到这一点.. 很确定以这种形式不可能。有什么方法可以专门针对被修补的项目,formArray
或者我可能没有正确理解这一点。
我可以通过将新值推送到formArray
this.items.push(this.buildItem(...));
但是我必须添加
this.items.removeAt(this.idx);
为了删除对空 build 的初始控制,这似乎不是任何好的代码。