Получить доступ к matTree в угловых - PullRequest
0 голосов
/ 04 декабря 2018

Я использую компонент дерева материалов.

Что я хочу сделать, это сохранить состояние дерева в локальном хранилище и впоследствии извлечь его.

Я сериализую данные dataSource в 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 голосов
/ 05 декабря 2018

Я понял это

  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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...