当前位置:   article > 正文

Vue+Element中Table懒加载删除或编辑数据后不动态更新_element 表格懒加载批量修改数据视图不更新

element 表格懒加载批量修改数据视图不更新

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  1. 官方描述
    在这里插入图片描述
    2.未进行二级项的数据请求,获取lazyTreeNodeMap未缓存数据
    在这里插入图片描述

3.异步加载二级项后,通过点击查询获取lazyTreeNodeMap缓存了异步请求的数据{3:[]}在这里插入图片描述

2.解决方案:

  1. 当我们进行删除或编辑操作后,可以清空lazyTreeNodeMap缓存的数据。当用户重新获取数据渲染时,由于lazyTreeNodeMap缓存的数据不存在了,框架就会渲染最新的。
methods: {
	// 定义一个方法,便于重复使用
	resetLazyTree() {
		// $refs.table 在<el-table ref="table">中定义
		this.$set(this.$refs.table.store.states, 'lazyTreeNodeMap', {})
	},
	delete() {
		// 你要执行的代码
		// 操作成功后
		this.resetLazyTree()
		...
		// 通过接口获取最新的数据
		...
	},
	update() {
		// 你要执行的代码
		// 操作成功后
		...
		this.resetLazyTree()
		// 通过接口获取最新的数据
		...
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/107558
推荐阅读
相关标签
  

闽ICP备14008679号