繁体   English   中英

如何在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文件,其中有我要更新模型的设置方法。

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
}

它适用于单个变量,但在尝试更新subClass和联系时出现错误, Can't read property subItem of undefined 我知道我必须在模型的构造函数中初始化subItem和itemList,但无法弄清楚语法。 如何初始化模型并更新模型?

请确保正在调用要在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());
    }

希望这可以帮助,

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

更改SomeModelMainClass或使用.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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM