Мат-дерево с асинхронной загрузкой детей добавляет детей в последний узел уровня - PullRequest
0 голосов
/ 13 сентября 2018

Я начал с базового примера, но изменил его так, что метод _getChildren вместо этого извлекает данные асинхронно (в моем случае это GraphQL, он не любит рекурсивные модели: /)

https://stackblitz.com/angular/jyyamlgpaay?file=app%2Ftree-flat-overview-example.ts

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

Итак,

1
--1-1
----1-1-1
--1-2

становится

1
--1-1
--1-2
----1-1-1

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

Код:

фабричный метод для решения проблем контекстана обратный звонок;Точки останова (отмеченные ниже) показывают, что узлы добавляются к нужным родителям.

  private lazyLoad(t: FeatureExplorerComponent): (node: FileNode) => Observable<FileNode[]> {
    return (originNode: FileNode) => {
      var node = originNode; //does not help, I think
      if (node.children.length > 0) //stops duplicate adds
        return observableOf(node.children);
      if (node.folder) {
        var folder = node.folder;
        return t.apollo.query<FolderQueryResponse>({
          query: FOLDER_QUERY, variables: { id: folder.id }
        }).pipe(map(response => {
          var f = response.data.folder;
          for (let n of t.transformFolders(t, f.folders)) {
            node.children.push(n); //this looks righ, both the node and the child
          }
          return node.children;
        }));
      }
      else
        return observableOf([]);
    };
  }

Возможный дубликат ( Angular 6 Material Nested Tree не работает с динамическими данными ), хотя яне меняя данные, просто лениво загружаю их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...