angular - Angular:深度复制反应形式
问题描述
我需要制作一个反应形式的深层副本。我曾尝试使用 ES6 扩展语法来克隆表单。我使用 Typescript 泛型将扩展语法的返回值类型转换为FormGroup
. 此外,克隆表单变量的类型设置为FormGroup
.
但是当通过这种方式克隆表单时,克隆的表单变量上的类型会丢失,即不再是FormGroup
. 所以,克隆的形式是不可用的。
这是相同的堆栈闪电战:形式克隆
上述克隆方式出了什么问题?为什么FormGroup
克隆表单上的类型会丢失?
解决方案
只需使用返回 FormGroup 的函数。您可以使用 setValue 或 patchValue 来提供相同的值。有些喜欢(我直接使用 FormGroup 的构造函数,但你也可以使用 FormBuilder)
createForm(data:any)
{
data=data || {name:null,group:{prop1:null,prop2:null}}
return new FormGroup({
name: new FormControl(data.name),
group:new FormGroup({
prop1:new FormControl(data.group.prop1),
prop2:new FormControl(data.group.prop2)
})
})
}
/*you can also
createForm(data:any)
{
const form=new FormGroup({
name: new FormControl(),
group:new FormGroup({
prop1:new FormControl(),
prop2:new FormControl()
})
})
if (data)
form.patchValue(data)
return form
}
*/
在 ngOnInit 中,例如
ngOnInit() {
this.myForm=this.createForm({name:"name",group:{prop1:"prop1",prop2:"prop2"}});
this.myForm2=this.createForm(null);
this.myForm2.patchValue(this.myForm.value)
//or this.myForm2.setValue(this.myForm.value)
}
推荐阅读
- javascript - 更改文件 json 中的其余 API 而无需重新部署
- python - 如何获取构成提取的图像分割对象的所有像素的列表/数组?
- javascript - HTML 表单不会返回结果
- kotlin - 无法在 MainActivity 中创建抽象类的实例
- performance - 性能 api 网核插入+更新
- sql - Laravel 控制器在 save() 处插入两个 id 列
- java - 如何分离 Cucumber、TestNg 中的常用步骤类和步骤定义类?
- openwrt - 由于 GLIBC 不匹配,在 Ubuntu 16.04 上构建 OpenWrt 19.07 将失败
- c# - 在.net core 3.1中使用httpclient postasync从webapi获取响应时出现内部服务器错误
- ios - TKSmartCardSlotManager iOS