如何在 angular/typescript 中初始化子 json 对象?

How do I initialize a child json object in angular/typescript?

我有一个 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 文件,其中包含 setter 方法,我正在尝试更新模型。

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 但我无法弄清楚语法。如何初始化模型和更新模型?

请确保您正在调用要在 MainClass 中初始化的复杂类型的构造函数。

export class MainClass {
    someVar: string;
    var2: string;
    subClass: SubClass();
    contact: ContactList();
}

注意括号。如果您有更复杂的初始化,我们也应该从其他角度考虑,因为您在这里描述了几个场景。例如在你的 SubClass 中,如果你希望在启动 SubClass 的实例时它也被初始化,你应该确保 subItem 有一个构造函数。

另一个在你的父 class 中初始化 subItem 的选项是在构造函数中做这样的事情:

 constructor() {
        //... some init code
        this.subItem = new Array<SubItemModel>();
        this.subItem.push(new SubItemModel());
    }

希望这对您有所帮助,

因为 subClasssubItem 未定义。您必须在设置值之前为它们创建新实例:

SomeModel改成MainClass或者用.map函数映射.

this.model.subClass = new SubClass();
this.model.subClass.subItem =  {item1:'123',item2: '222', item3: '333'};

这个错误的原因是subClass ,subItem , contact 没有定义。要解决此问题,请按如下方式更改模型

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;
}

希望这可以帮助您理解错误,您可以根据需要更改代码。希望这会有所帮助。

我不得不像这样初始化模型中的构造函数

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;
}