el-table 多选表格存在分页,编辑再次操作勾选会丢失原来选中的数据
这个问题通常是因为在分页时,Vue 重新渲染了 el-table
,导致已勾选的项失去了选中状态。要解决这个问题,你需要确保在分页时保存和恢复勾选状态。
以下是一个简单的解决方案:
- 使用
ref
获取表格引用。 - 使用
tableData
作为表格数据源,并且在其中加入一个字段用于标记勾选状态。 - 使用
currentPage
和pageSize
跟踪分页状态。 - 在分页事件(如点击页码)中保存和恢复勾选状态。
示例代码:
<template>
<el-table
:data="paginatedData"
ref="multipleTable"
@selection-change="handleSelectionChange"
style="width: 100%">
<el-table-column
type="selection"
width="55">
</el-table-column>
<!-- 其他列 -->
</el-table>
<!-- 分页组件 -->
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[10, 20, 30, 40]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
</template>
<script>
export default {
data() {
return {
tableData: [], // 原始数据
multipleSelection: [], // 已勾选的数据
currentPage: 1,
pageSize: 10,
total: 0,
};
},
computed: {
paginatedData() {
const start = (this.currentPage - 1) * this.pageSize;
const end = start + this.pageSize;
return this.tableData.slice(start, end);
},
},
methods: {
handleSelectionChange(val) {
this.multipleSelection = val;
},
handleSizeChange(val) {
this.pageSize = val;
this.handleCurrentChange(this.currentPage);
},
handleCurrentChange(val) {
this.currentPage = val;
// 保存当前页的勾选状态
const selected = new Set(this.multipleSelection.map(item => item.id));
this.paginatedData.forEach(item => {
item._checked = selected.has(item.id);
});
},
// 初始化数据时恢复勾选状态
restoreSelection() {
this.$nextTick(() => {
this.multipleSelection.forEach(row => {
this.$refs.multipleTable.toggleRowSelection(row, true);
});
});
},
},
// 假设你的数据初始化在这里
created() {
// 初始化数据源和总数
this.tableData = this.generateData();
this.total = this.tableData.length;
// 恢复勾选状态
this.restoreSelection();
},
// 其他方法...
};
</script>
在这个示例中,我们假设每个数据项都有一个唯一的 id
字段。我们通过给每个数据项添加一个 _checked
字段来跟踪它的勾选状态。在分页事件处理函数中,我们保存了当前页的勾选状态到 selected
集合,并在 restoreSelection
方法中恢复这些状态。
注意:这个例子中的 id
字段和 generateData
方法是假设的,你需要根据你
评论已关闭