Невозможно прочитать свойство 'pu sh' из null в angular 9 - PullRequest
0 голосов
/ 30 марта 2020

Я получаю плоский список с сервера, и я должен создать дерево, которое перечисляет.

это моя модель:

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 добавьте к этому свойству 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)

Невозможно прочитать свойство 'pu sh'

whats проблема ? как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Я собираюсь предложить некоторые изменения в вашем коде, чтобы улучшить это. Я надеюсь, что эти изменения будут полезны для вас.

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;
  })
0 голосов
/ 30 марта 2020

Это происходит, когда model.childs не установлен в пустой массив в начале. Мы можем решить это как:

if(!model.childs) model.childs = [] as Childes[];
model.childs.push(childe)  // This line should work fine now.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...