el-tree过滤数据的问题?

一路梦香
  • 268

要做一个搜索功能,用了官方文档给的过滤方法,但是这个方法只能搜索到已经展开过的节点,比如初始化以后二级节点还没展开,那么就搜不到二级节点,展开再关闭就可以搜索到了。因为层级较多,不考虑默认展开。
这个方法走不通我本想自己写一个搜索,但是在官方文档里连一个展开子节点的方法都没找到...

      <el-tree
        v-if="tree.length>0"
        :load="loadNode"
        :props="defaultProps"
        lazy
        @node-click="nodeClick"
        :render-after-expand="false"
        ref="tree"
      ></el-tree>
// 树的过滤
filterNode(value, data, node) {
  if (!value) {
    return true;
  }
  let level = node.level;
  let _array = []; //这里使用数组存储 只是为了存储值。
  this.getReturnNode(node, _array, value);
  let result = false;
  _array.forEach(item => {
    result = result || item;
  });
  return result;
},
getReturnNode(node, _array, value) {
  let isPass =
    node.data &&
    node.data.NODEMSG &&
    node.data.NODEMSG.indexOf(value) !== -1;
  isPass ? _array.push(isPass) : "";
  this.index++;
  console.log(this.index);
  if (!isPass && node.level != 1 && node.parent) {
    this.getReturnNode(node.parent, _array, value);
  }
},
回复
阅读 2.7k
2 个回答
hfhan
  • 22.7k
✓ 已被采纳

因为你的树设置了懒加载,子节点不展开是不会加载数据的,这时候搜索肯定搜索不到,所以第一种方法就是去掉懒加载,直接加载全部数据。

第二种办法就是自己做个搜索,但还是需要全部数据,从全部数据中过滤你需要的数据,用过滤后的数据重新生成一棵树

求解决方案,或者通过事件打开子节点的方法

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏