我有一个model.ts
文件。
export class MainClass {
someVar: string;
var2: string;
subClass: SubClass;
contact: ContactList;
}
export class SubClass {
subItem: {
item1: string;
item2: string;
item3: string;
}
constructor() {}
}
export class ContactList {
itemList: ListItems[];
constructor() {}
}
export class ListItems {
list1: string;
list2: string;
list3: string;
}
我有一个service.ts
文件,其中有我要更新模型的设置方法。
constructor(private model: SomeModel) {}
//some code
updateList(param1, param2, param3) {
this.model.subClass.subItem.item1 = param1;//doesn't work
this.model.contact.item[0].list1 = param2;//doesn't work
this.model.someVar = param3;//works
}
它适用于单个变量,但是在尝试更新子类和联系人时出现错误Can't read property subItem of undefined
。我知道我必须在模型的构造函数中初始化subItem和itemList,但无法弄清楚语法。如何初始化模型并更新模型?
答案 0 :(得分:0)
请确保您要在MainClass中调用要初始化的复杂类型的构造函数。
export class MainClass {
someVar: string;
var2: string;
subClass: SubClass();
contact: ContactList();
}
请注意括号。如果您有更复杂的初始化,还有其他角度,我们也应该考虑,因为这里描述了几种情况。例如,在子类中,如果希望在启动子类的实例时也将其初始化,则应确保子项具有构造函数。
在父类中初始化subItem的另一种方法是在构造函数中执行以下操作:
constructor() {
//... some init code
this.subItem = new Array<SubItemModel>();
this.subItem.push(new SubItemModel());
}
希望这会有所帮助,
答案 1 :(得分:0)
因为 subClass 和 subItem 未定义。您必须在设置值之前为其创建新实例:
将 SomeModel 更改为 MainClass 或使用 .map 函数进行映射。
this.model.subClass = new SubClass();
this.model.subClass.subItem = {item1:'123',item2: '222', item3: '333'};
答案 2 :(得分:0)
此错误的原因是subClass,subItem,联系人未定义。要解决此问题,请更改模型,如下所示
export class MainClass {
someVar: string;
var2: string;
subClass: SubClass;
contact: ContactList;
constructor() {
if(!this.subClass)
this.subClass =new SubClass();
if(!this.contact)
this.contact =new ContactList();
}
}
export class SubClass {
subItem: SubItem;
constructor() {
if(!this.subItem)
this.subItem =new SubItem();
}
}
export class SubItem {
item1: string;
item2: string;
item3: string;
constructor() {}
}
export class ContactList {
itemList: ListItems[]=[];
constructor() {}
}
export class ListItems {
list1: string;
list2: string;
list3: string;
}
在使用中
constructor(private model: SomeModel) {}
//some code
updateList(param1, param2, param3) {
this.model.subClass.subItem.item1 = param1;
this.model.contact.itemList = [];
let listItem: ListItems =new ListItems();
listItem.list1 =param2
this.model.contact.itemList.push(listItem)
this.model.someVar = param3;
}
这可以帮助您理解错误,并且可以根据需要更改代码。希望这会有所帮助。
答案 3 :(得分:0)
我必须像这样在模型中初始化构造函数
export class MainClass {
someVar: string;
var2: string;
subClass: SubClass;
contact: ContactList;
constructor() {
this.subClass = new SubClass();
this.contact = new ContactList();
}
}
export class SubClass {
subItemVar: SubItem;
constructor() {
this.subItemVar = new SubItem();
}
}
export class SubItem {
item1: string;
item2: string;
item3: string;
}
export class ContactList {
itemList: ListItems[];
constructor() {
this.itemList = new Array<ListItems>();
}
}
export class ListItems {
list1: string;
list2: string;
list3: string;
}