要做一个搜索功能,用了官方文档给的过滤方法,但是这个方法只能搜索到已经展开过的节点,比如初始化以后二级节点还没展开,那么就搜不到二级节点,展开再关闭就可以搜索到了。因为层级较多,不考虑默认展开。
这个方法走不通我本想自己写一个搜索,但是在官方文档里连一个展开子节点的方法都没找到...
<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);
}
},
因为你的树设置了懒加载,子节点不展开是不会加载数据的,这时候搜索肯定搜索不到,所以第一种方法就是去掉懒加载,直接加载全部数据。
第二种办法就是自己做个搜索,但还是需要全部数据,从全部数据中过滤你需要的数据,用过滤后的数据重新生成一棵树