angular - 用Angular中的formArray修补formGroup中的值?
问题描述
https://stackblitz.com/edit/angular-fzgtqc?file=src%2Fapp%2Fapp.component.ts 可重现示例。
这是我正在处理的示例数据https://stackblitz.com/edit/angular-fzgtqc?file=SampleData
app.component.ts
editTrainner(trainner: Trainner) {
this._trainnerservice.currentTrainner = Object.assign({}, trainner);
this.registrationForm.patchValue({
personal_details: { type: Object,
name: { type: Object,
first_name: this._trainnerservice.currentTrainner.personal_details.name.first_name,
last_name: this._trainnerservice.currentTrainner.personal_details.name.last_name
},
dob: this._trainnerservice.currentTrainner.personal_details.dob,
about_yourself: this._trainnerservice.currentTrainner.personal_details.about_yourself,
languages_known: this.fb.array([this.addlanguages_known()]),
willingly_to_travel: this._trainnerservice.currentTrainner.personal_details.willingly_to_travel
}
});
}
addlanguages_known(): any {
const control = this.registrationForm.get('languages_known') as FormArray;
this._trainnerservice.currentTrainner.personal_details.languages_known.forEach(x => {
control.push(this.fb.control(''));
});
}
执行代码时出现错误:“无法读取属性‘push’ of null ”
当用户单击编辑按钮时,我想将表单数组数据推送到表单中。
解决方案
首先,您应该删除从内部设置表单数组值的函数patchValue
。addlanguages_known()
而是按原样调用函数。那么你到formarray的路径不正确。您的 formarray 在 inside personal_details
,因此正确:
addlanguages_known(): any {
const control = this.registrationForm.get('personal_details.languages_known') as FormArray;
this._trainnerservice.currentTrainner.personal_details.languages_known.forEach(x => {
control.push(this.fb.control(x));
});
}
如前所述,从以下行中删除editTrainner()
:
languages_known: this.fb.array([this.addlanguages_known()]),
PS:不相关,但是您使用的是某种通用类型Object
,您应该根据模型键入数据。
推荐阅读
- html - 按百分比调整表格列宽
- laravel - laravel:用户、作者和帖子的关系
- angular - 将动态变量值附加到 matselect 的 ngmodel 不起作用
- laravel - 如何将登录哈希 bcrypt 更改为 hash256
- python - 如何识别列中的数字并在该数字中添加特定数字
- javascript - 如何根据文本字段搜索显示列表项?
- c - 无法在 5.8 内核上包含 `linux/config.h`
- linux - 如何修复 64 位 Linux 上的 exec 格式错误?
- firebase - 按 uid 计算唯一的帖子视图
- php - 使用 PHP 的 Dropbox API 获取 Dropbox 中的文件内容