我正在使用材料树组件。
我想要做的是将树状状态保存在本地存储中,然后再进行检索。
我在json(JSON.stringify)中序列化数据源的数据,然后反序列化
这是功能:
initTree() {
const tree_json = localStorage.getItem(this.storage_key)
if (tree_json != null) {
const nodes = JSON.parse(tree_json)
this.dataSource.data = nodes
this.matTree.renderNodeChanges(nodes)
} else {
this.treeSource.getRootNodes().subscribe(nodes => {
this.dataSource.data = nodes
})
}
}
它看起来像行得通,但根本不行。.如果我单击展开的节点,它不会折叠,则会添加重复的子级。保存树的正确方法是什么?
我发现了这个,可能是我需要以某种方式调用render吗? https://material.angular.io/components/tree/api#MatTree
答案 0 :(得分:0)
我知道了
initTree() {
const savedTree = this.getSavedTree()
if (savedTree != null) {
savedTree.selectedNodes.forEach(node => {
const nodeStr = JSON.stringify(node)
const obj = savedTree.nodes.find(node2 => JSON.stringify(node2) == nodeStr)
if (obj != undefined) {
this.treeControl.expansionModel.select(obj)
}
})
this.dataSource.data = savedTree.nodes
} else {
this.treeSource.getRootNodes().subscribe(nodes => {
this.dataSource.data = nodes
})
}
}
interface SavedTree {
timestamp: number
nodes: tree_node.Node[],
selectedNodes: tree_node.Node[]
}
function getCurrentSeconds(): number {
return Date.now().valueOf() * 1000
}