Vue Element.ui树,发出重载事件

Zul*_*usK 10 javascript tree mongoose vue.js element-ui

我使用Element.ui树组件在Vue上创建一个SPA(类似于云盘),以显示文件夹树.问题是树本身不会立即加载所有内容,而是在惰性修饰符的帮助下顺序加载.

服务器部分是mongoose + mongoose-path-tree.使用mongoose-path-tree意味着数据库中的树存储方案是下一个:每个节点都不知道它的子节点,但是子节点将它们的完整路径存储到根元素:

#root_id #subroot_id # ... #parent_id #this_id
Run Code Online (Sandbox Code Playgroud)

问题是如果用户对树进行更改(加载文件,创建新文件夹等)并且服务器接受它们,那么如何通知树它需要加载新数据.元文件ui在其文档中没有描述如何捕获事件以导致重绘树.

客户端树模板

<el-tree
 :props="defaultProps"
 :load="loadNode"
 @node-click="handleNodeClick"
 :expand-on-click-node="false"
 lazy
 node-key="id"
 ref="tree"
 />
Run Code Online (Sandbox Code Playgroud)

加载新节点

loadNode: async function (node, resolve) {
try {
  let firstGeneration = await foldersAPI.get(this.$store.state.user.myDrive);
  if (node.level === 0) {
    return resolve(firstGeneration.data.folder.children);
  } else {
    var data;
    if (node.data.hasChildren) {
      let children = await foldersAPI.get(node.data._id);
      console.log(children);
      data = children.data.folder.children;
    } else {
      data = [];
    }
    resolve(data);
  }
} catch (e) {
  console.log(e)
}
Run Code Online (Sandbox Code Playgroud)

din*_*otz 5

我的解决方案是通过将 v-if 属性添加到树视图然后创建一个方法来简单地重新渲染树视图

reload() {
    this.show = false;
    this.$nextTick(() => {
         this.show = true
    })
}
Run Code Online (Sandbox Code Playgroud)

调用该重新加载函数然后正确地重新加载树视图