我的mat树重绘使用BehaviorSubject对数据源数据更改进行初始化。
我观察到我不时更新表单,以便更新FlatTreeControl生成的树数据。
该代码非常基础且易于理解,因此我看不到该问题。
我尝试在stackBlitz上使用角扁平树示例的简化版本: https://stackblitz.com/angular/rlqvokgplrko?file=app%2Ftree-checklist-example.ts
这是我的版本: https://stackblitz.com/edit/create-iq2meg
我期望的是,就像官方的mat-tree示例中一样,数据是动态更新的,而不必重新绘制整个树并让它每次崩溃。
答案 0 :(得分:0)
我们可以使用GitHub by @danielkuhlwein
中提到的解决方法在进行任何重新渲染之前,将展开的节点保存到列表中:
saveExpandedNodes() {
this.expandedNodes = new Array<BulletFlatNode>();
this.treeControl.dataNodes.forEach(node => {
if (node.expandable && this.treeControl.isExpanded(node)) {
this.expandedNodes.push(node);
}
});
}
然后在执行重新渲染后还原展开的节点:
restoreExpandedNodes() {
this.expandedNodes.forEach(node => {
this.treeControl.expand(this.treeControl.dataNodes.find(n => n.id === node.id));
});
}