我试图手动设置一个值对象的属性如果它的数据不存在从服务调用
数据来自服务调用(它可以工作,因为我得到了数据)。从服务调用中得到的对象看起来是这样的:
export class AllHouseData {
dataList: HouseResponse[];
numberOfHouses: number;
}
houserresponse对象的值对象如下所示:
export class HouseResponse {
id: number;
name: string;
settings: HouseSettings[];
}
housessettings对象的值对象如下所示:
export class HouseSettings {
id: number;
houseCode: string
parking: any;
}
下面是我试图分配对象属性的代码:
export class HouseComponent implements OnInit {
houseData: AllHouseData;
callHouseService(houseList) {
this.houseService.getHouseData(houseList).subscribe((data) => {
this.houseData = data;
if (data === null) {
this.houseData.dataList = [
{
id: 0,
name: "",
settings: [{ id: number, houseCode: "", parking: false }],
},
];
}
});
}
}
当我尝试手动设置数据时,Typescript没有给我任何错误。然而,在浏览器的控制台中,我得到以下错误:error TypeError: Cannot set properties of null (setting 'dataList').
我的问题是,手动设置这个对象的正确方法是什么?
看起来您的gethoussedata调用返回null,您没有对此进行检查。
如果你需要这个。我建议使用具有默认值的构造函数。
export class HouseSettings {
constructor(public id = 0, houseCode = '', parking = false) {}
}
export class HouseResponse {
constructor(public id = 0, name = '', public settings = [new HouseSettings()]) {}
}
export class AllHouseData {
constructor(public dataList = [new HouseResponse()], public numberOfHouses = 0) {}
}
那么在你的订阅中你可以简单地使用:
data => this.houseData = data ?? new AllHouseData()