以角度访问matTree

时间:2018-12-04 12:08:11

标签: angular angular-material

我正在使用材料树组件。

我想要做的是将树状状态保存在本地存储中,然后再进行检索。

我在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

1 个答案:

答案 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
}