一、懒加载的tree已经全部展开,外部点击删除的时候不需要重新展开点击获取下一层数据
<template>
<el-tree
ref="tree"
:data="treeData"
:props="defaultProps"
render-after-expand
highlight-current
lazy
: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 和 node
handleNodeClick(data,node) {
this.currentData = data
this.currentNode = node
},
// tree外部点击删除,并且不用初始化tree
deleteFn(){
// 删除接口调用成功的时候,再调用这个方法
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 = node
this.resolve = resolve
return 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 和 node
handleNodeClick(data,node) {
this.currentData = data
this.currentNode = node
},
// 调用新增接口后,然后再初始化当前节点,而不是初始化整个tree
add(){
// 获取当前节点,key可以在@node-click和:load绑定函数的回调参数node用变量存储后有需要刷新的地方取node.key
let node = this.$refs.tree.getNode(this.currentNode.key);
// 设置未进行懒加载状态
node.loaded = false;
// 重新展开节点就会间接重新触发load达到刷新效果
node.expand();
}