一、懒加载的tree已经全部展开,外部点击删除的时候不需要重新展开点击获取下一层数据
<template>
<el-treeref="tree":data="treeData":props="defaultProps"render-after-expandhighlight-currentlazy:expand-on-click-node="false"@node-click="handleNodeClick":default-expanded-keys="defaultexpanded":node-key="defaultProps['id']":default-checked-keys="defaultchecked":load="loadNode"><span class="custom-tree-node" slot-scope="{ node }"><span v-if="node.level === 1" class="ewf-deptonelevel font16">{{node.label}}</span><span v-else class="ewf-depttwolevel">{{ node.label }}</span></span></el-tree>
</template><script>
export default {data() {return {treeName: "",treeHeight: "500px",treeData: [],defaultchecked: [],defaultexpanded: ["all"],defaultProps: {children: "children",label: "categoryName",id: "iidd",isLeaf: "leaf",},};},methods: {// 点击的时候记录当前 点击的data 和 nodehandleNodeClick(data,node) {this.currentData = datathis.currentNode = node},// tree外部点击删除,并且不用初始化treedeleteFn(){// 删除接口调用成功的时候,再调用这个方法this.$refs.tree.remove(this.data); // 通过节点id找到对应树节点对象},}
}
</script>
二、重置懒加载的tree
// 重置的时候调用这个方法resetAllTree() {this.node.childNodes = []// this.node, this.resolve 在 loadNode 获取this.loadNode(this.node, this.resolve)},// 页面加载完成时,elmement-ui 会默认自动调用一次loadNode(node, resolve) {if (node.level === 0) {// 第一次的时候记录 node, resolve ,重置的时候需要用到this.node = nodethis.resolve = resolvereturn resolve([{iidd: "all",categoryName: "全部分类",},]);} else if (node.level === 1) {this.getTreeData().then((res) => {resolve(res);});} else {this.getTreeData(node).then((res) => {resolve(res);});}},getTreeData(node) {return new Promise((resolve, reject) => {let params = {sourceSystem:this.sourceSystem}if(node && node.data && node.data.iidd){params.iidd = node.data.iidd}// 调用接口retrieveLazyMenus(params).then((res) => {res.data.forEach(el => {// hasChildren 接口返回的字段,用来表示是否还有子级数据el.leaf = !el.hasChildren})resolve(res.data);});});},
三、如顶部图片所示,给某一项新增子级数据,不初始化tree
// 新增的时候记录当前 点击的data 和 nodehandleNodeClick(data,node) {this.currentData = datathis.currentNode = node},// 调用新增接口后,然后再初始化当前节点,而不是初始化整个treeadd(){// 获取当前节点,key可以在@node-click和:load绑定函数的回调参数node用变量存储后有需要刷新的地方取node.keylet node = this.$refs.tree.getNode(this.currentNode.key);// 设置未进行懒加载状态node.loaded = false;// 重新展开节点就会间接重新触发load达到刷新效果node.expand();}