赞
踩
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>
3.异步加载二级项后,通过点击查询获取lazyTreeNodeMap缓存了异步请求的数据{3:[]}
2.解决方案:
methods: { // 定义一个方法,便于重复使用 resetLazyTree() { // $refs.table 在<el-table ref="table">中定义 this.$set(this.$refs.table.store.states, 'lazyTreeNodeMap', {}) }, delete() { // 你要执行的代码 // 操作成功后 this.resetLazyTree() ... // 通过接口获取最新的数据 ... }, update() { // 你要执行的代码 // 操作成功后 ... this.resetLazyTree() // 通过接口获取最新的数据 ... } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。