Angular 反应式表单嵌套 FormGroup 中的空值
Null value in Angular Reactive form nested FormGroup
我有一个 angular 带有嵌套表单组的反应式表单
this.form = new FormGroup({
name: new FormControl(),
address: new FormGroup({
line1: new FormControl(),
line2: new FormControl()
})
});
如果我使用包含嵌套字段的对象调用 form.patchValue,一切都会按预期正常工作:
this.form.patchValue({
name: 'test',
address: {
line1: 'test line 1',
line2: 'test line 2'
}
});
然而,如果地址 属性 为空:
this.form.patchValue({
name: 'test',
address: null
});
我收到一个错误:无法将 undefined 或 null 转换为对象。
我如何解决这个问题,因为从服务器返回的对象是有效的,我无法控制它。
此处示例:https://stackblitz.com/edit/angular-broncz
谢谢
您可以重置控件:
setForm2() {
this.form.controls['address'].reset()
this.form.patchValue({
name: 'test'
});
}
只需给地址一个空对象。这不会在 Stackblitz 上引发任何错误,只会更新您喜欢的内容。
setForm2() {
this.form.patchValue({
name: 'test',
address: {}
});
}
你说你从你的服务器得到了一个你无法控制的对象,所以你不知道 address 是否有值。您可以为此使用 ||
(或)运算符。
您也可以重置表单以防万一,具体取决于您的使用方式。如果表格在 patchValue
之前不可编辑,则无需重置。
// faking server response
const myObj = { name: 'mytest', address: null };
this.form.reset();
this.form.patchValue({
name: myObj.name,
address: myObj.address || {}
});
我有一个 angular 带有嵌套表单组的反应式表单
this.form = new FormGroup({
name: new FormControl(),
address: new FormGroup({
line1: new FormControl(),
line2: new FormControl()
})
});
如果我使用包含嵌套字段的对象调用 form.patchValue,一切都会按预期正常工作:
this.form.patchValue({
name: 'test',
address: {
line1: 'test line 1',
line2: 'test line 2'
}
});
然而,如果地址 属性 为空:
this.form.patchValue({
name: 'test',
address: null
});
我收到一个错误:无法将 undefined 或 null 转换为对象。
我如何解决这个问题,因为从服务器返回的对象是有效的,我无法控制它。
此处示例:https://stackblitz.com/edit/angular-broncz
谢谢
您可以重置控件:
setForm2() {
this.form.controls['address'].reset()
this.form.patchValue({
name: 'test'
});
}
只需给地址一个空对象。这不会在 Stackblitz 上引发任何错误,只会更新您喜欢的内容。
setForm2() {
this.form.patchValue({
name: 'test',
address: {}
});
}
你说你从你的服务器得到了一个你无法控制的对象,所以你不知道 address 是否有值。您可以为此使用 ||
(或)运算符。
您也可以重置表单以防万一,具体取决于您的使用方式。如果表格在 patchValue
之前不可编辑,则无需重置。
// faking server response
const myObj = { name: 'mytest', address: null };
this.form.reset();
this.form.patchValue({
name: myObj.name,
address: myObj.address || {}
});