Я начал с базового примера, но изменил его так, что метод _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 не работает с динамическими данными ), хотя яне меняя данные, просто лениво загружаю их.