Vue+Element中Table懒加载删除或编辑数据后不动态更新
1.问题的来源在Element中使用Table树形数据懒加载(设置 lazy 属性为 true)模式。框架会通过row-key指定的属性来缓存操作者异步请求的数据 ,所以我们进行删除或编辑操作后重新请求数据,框架会优先通过row-key指定的id来检查是否已存在,如果数据存在使用旧数据,如果数据不存在使用新数据,所以table中查看更新后的数据发生没有变化。下面是实际演示例子:代码:<tem
·
1.问题的来源
在Element中使用Table树形数据懒加载(设置 lazy 属性为 true)模式。框架会通过row-key指定的属性来缓存操作者异步请求的数据 ,所以我们进行删除或编辑操作后重新请求数据,框架会优先通过row-key指定的id来检查是否已存在,如果数据存在使用旧数据,如果数据不存在使用新数据,所以table中查看更新后的数据发生没有变化。下面是实际演示例子:
- 代码:
<template>
<el-table
ref="table"
:data="tableData"
style="width: 100%"
row-key="id"
border
lazy
:load="load"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}">
<el-table-column
prop="date"
label="日期"
width="180">
</el-table-column>
<el-table-column
prop="name"
label="姓名"
width="180">
</el-table-column>
<el-table-column
prop="address"
label="地址">
</el-table-column>
<el-table-column
label="编辑"
width="120"
>
<el-button @click="handleQuery">查询</el-button>
</el-table-column>
</el-table>
</template>
<script>
export default {
data() {
return {
tableData: [{
id: 1,
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
id: 2,
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄'
}, {
id: 3,
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1519 弄',
hasChildren: true
}, {
id: 4,
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀区金沙江路 1516 弄'
}]
}
},
methods: {
load(tree, treeNode, resolve) {
setTimeout(() => {
resolve([
{
id: 31,
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1519 弄'
}, {
id: 32,
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1519 弄'
}
])
}, 1000)
},
handleQuery() {
// lazyTreeNodeMap:数据缓存的对象
console.log(this.$refs.table.store.states.lazyTreeNodeMap)
}
}
}
</script>
- 官方描述
2.未进行二级项的数据请求,获取lazyTreeNodeMap未缓存数据
3.异步加载二级项后,通过点击查询获取lazyTreeNodeMap缓存了异步请求的数据{3:[]}
2.解决方案:
- 当我们进行删除或编辑操作后,可以清空lazyTreeNodeMap缓存的数据。当用户重新获取数据渲染时,由于lazyTreeNodeMap缓存的数据不存在了,框架就会渲染最新的。
methods: {
// 定义一个方法,便于重复使用
resetLazyTree() {
// $refs.table 在<el-table ref="table">中定义
this.$set(this.$refs.table.store.states, 'lazyTreeNodeMap', {})
},
delete() {
// 你要执行的代码
// 操作成功后
this.resetLazyTree()
...
// 通过接口获取最新的数据
...
},
update() {
// 你要执行的代码
// 操作成功后
...
this.resetLazyTree()
// 通过接口获取最新的数据
...
}
}
更多推荐
已为社区贡献2条内容
所有评论(0)