element 树形表在懒加载模式下官方没有提供实时局部刷新节点的方法,在网上看了好多博客也没有比较好的办法
我能想到最直接的办法就是读源码了,在差不多三小时的源码浏览后终于在tree.js中找到懒加载关键的一个方法:
loadData(row, key, treeNode) {
const { load } = this.table;
const { lazyTreeNodeMap, treeData } = this.states;
if (load && !treeData[key].loaded) {
treeData[key].loading = true;
load(row, treeNode, (data) => {
if (!Array.isArray(data)) {
throw new Error('[ElTable] data must be an array');
}
treeData[key].loading = false;
treeData[key].loaded = true;
treeData[key].expanded = true;
if (data.length) {
this.$set(lazyTreeNodeMap, key, data);
}
this.table.$emit('expand-change', row, true);
});
}
}
- element 在每次更新节点时都调用了该方法,其中的load方法就是我们绑定的懒加载方法;最终发现它实现节点更新的关键在于:
this.$set(lazyTreeNodeMap, key, data)
lazyTreeNodeMap:this.$refs.table.store.states.lazyTreeNodeMap
key:就是table-key
data:节点的children数组
于是写一个更新某个节点的子节点的方法:
refreshRow(id){
getList({ pid: id }).then(res => {
if (res.success) {
this.$set(this.$refs.table.store.states.lazyTreeNodeMap, id, res.data.dataList)
}
})
}
- 在增加和删除后更新该节点的父节点(调用以上方法)即可