簡體   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