无法读取角度9中null的属性“ push”

时间:2020-03-30 05:58:46

标签: javascript angular typescript

我从服务器获取平面列表,并且我必须创建该列表的树。

这是我的模特:

export interface ClaimManagerList {
  id: number;
  title: string;
  parentId: number;
  isChilde: boolean;
  childs: Childes[];
}

export interface Childes {
  id: number;
  title: string;
  parentId: number;
  isChilde: boolean;
}

在这段代码中,我将平面列表转换为树列表->子级添加到此属性childs

  return this.claimsManagerService.getAll(this.searchParam).pipe(
  map(data => {
    data['records'].forEach(element => {
      let model = {} as ClaimManagerList;
      if (element.parentId == null) {
        model.id = element.id;
        model.isChilde = element.isChilde;
        model.parentId = element.parentId;
        model.title = element.title;
        data['records'].forEach(child => {
          if (child.parentId == element.id) {
            let childe = {} as Childes;
            childe.id = child.id;
            childe.isChilde = child.isChilde;
            childe.parentId = child.parentId;
            childe.title = child.title;
            model.childs.push(childe)
          }
        })
        this.claims.push(model)
      }
    })
    return this.claims;
  })

但是它显示了这一行的错误:

model.childs.push(childe)

无法读取属性“ push”

是什么问题?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

发生这种情况是因为model.childs开头没有设置为空数组。我们可以这样解决:

if(!model.childs) model.childs = [] as Childes[];
model.childs.push(childe)  // This line should work fine now.

答案 1 :(得分:0)

我将对您的代码提出一些更改,以改善此问题。希望这些更改对您有用。

return this.claimsManagerService.getAll(this.searchParam).pipe(
  map((data: any) => {
    data.records.forEach((element: any) => {
      let model: ClaimManagerList = {};
      if (element.parentId == null) {
        model.id = element.id;
        model.isChilde = element.isChilde;
        model.parentId = element.parentId;
        model.title = element.title;
        model.childs = [];
        data.records.forEach((child: any) => {
          if (child.parentId == element.id) {
            let childe = {} as Childes;
            childe.id = child.id;
            childe.isChilde = child.isChilde;
            childe.parentId = child.parentId;
            childe.title = child.title;
            model.childs.push(childe)
          }
        })
        this.claims.push(model)
      }
    })
    return this.claims;
  })
相关问题