Element UI 分页选择保留之前选中的数据

这篇博客介绍了如何在使用ElementUI的分页表格时,通过设置`reserve-selection`为`true`并在`row-key`中指定行的唯一标识,如`getRowKeys`方法,来实现在数据更新后保留之前选中的行数据的功能。

Element UI 分页选择保留之前选中的数据

<el-table :data="alarmTable" style="width: 100%" ref="multipleTable" :row-key="getRowKeys" @selection-change="handleSelectionChange">
      <el-table-column type="selection" width="55" :reserve-selection="true">
      </el-table-column>
</el-table>

<script>
 data() {
    return {
      // 获取row的key值
      getRowKeys(row) {
        return row.id;
      },
      multipleSelection:[] 
    }
 }
 methods:{
    handleSelectionChange(val) {
      this.multipleSelection = val;
    },
 }
</script>

:row-key 行数据的 Key,用来优化 Table 的渲染;在使用 reserve-selection 功能与显示树形数据时,该属性是必填的。类型为 String 时,支持多层访问:user.info.id,但不支持 user.info[0].id,此种情况请使用 Function

row-key=“id” 或者 :row-key=“getRowKeys” getRowKeys是个方法

reserve-selection 仅对 type=selection 的列有效,类型为 Boolean,为 true 则会在数据更新之后保留之前选中的数据(需指定 row-key

### 实现 el-table 多选切换分页保留选择数据并自动选中的方法 在使用 Element UI 的 `el-table` 组件时,可以通过以下方式实现多选功能,并在切换分页保留之前选择数据且自动选中。 #### 1. 设置 `reserve-selection` 属性 为了在分页切换时保留选中数据,需要为 `el-table-column` 的 `type="selection"` 设置属性 `:reserve-selection="true"`[^1]。该属性确保在分页切换时不会丢失已选中的行。 ```html <el-table-column type="selection" width="55" :reserve-selection="true" /> ``` #### 2. 配置 `row-key` 为了支持跨页选择数据的功能,必须为 `el-table` 设置 `:row-key` 属性。`row-key` 是一个唯一标识符,用于区分每一行数据。通常可以使用数据对象中的某个唯一字段(如 `id`)作为 `row-key`[^2]。 ```html <el-table :data="tableData" @selection-change="handleSelectionChange" :row-key="getRowKey"> </el-table> ``` 其中,`getRowKey` 是一个方法,用于返回每一行的唯一标识: ```javascript methods: { getRowKey(row) { return row.id; // 假设每行数据都有一个唯一的 id 字段 } } ``` #### 3. 监听 `selection-change` 事件 通过监听 `@selection-change` 事件,可以获取用户当选中的行数据,并将其存储到组件的状态中。这有助于后续操作(如限制最大选择数量或移除选中项)[^1]。 ```javascript data() { return { selectedRows: [], // 存储已选中的行 maxSelection: 15 // 最大选择数量 }; }, methods: { handleSelectionChange(selection) { this.selectedRows = selection; if (this.selectedRows.length > this.maxSelection) { this.$refs.multipleTable.clearSelection(); this.selectedRows.slice(0, this.maxSelection).forEach(row => { this.$refs.multipleTable.toggleRowSelection(row, true); }); this.$message.warning(`最多只能选择 ${this.maxSelection} 条数据`); } } } ``` #### 4. 自动选中已选数据 当页面重新载或切换分页时,可以通过遍历当数据,判断哪些行已经存在于 `selectedRows` 中,并手动调用 `toggleRowSelection` 方法进行选中[^3]。 ```javascript watch: { tableData(newData) { newData.forEach(row => { const isAlreadySelected = this.selectedRows.some(selectedRow => selectedRow.id === row.id); if (isAlreadySelected) { this.$refs.multipleTable.toggleRowSelection(row, true); } }); } } ``` #### 5. 示例代码 以下是完整的代码示例: ```html <template> <el-table :data="currentPageData" ref="multipleTable" row-key="id" style="width: 100%" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55" :reserve-selection="true"></el-table-column> <el-table-column prop="id" label="ID" width="180"></el-table-column> <el-table-column prop="name" label="Name" width="180"></el-table-column> <el-table-column prop="value" label="Value"></el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [], // 全部数据 currentPageData: [], // 当数据 selectedRows: [], // 已选中的行 maxSelection: 15 // 最大选择数量 }; }, methods: { getRowKey(row) { return row.id; // 每行数据的唯一标识 }, handleSelectionChange(selection) { this.selectedRows = selection; if (this.selectedRows.length > this.maxSelection) { this.$refs.multipleTable.clearSelection(); this.selectedRows.slice(0, this.maxSelection).forEach(row => { this.$refs.multipleTable.toggleRowSelection(row, true); }); this.$message.warning(`最多只能选择 ${this.maxSelection} 条数据`); } } }, watch: { currentPageData(newData) { newData.forEach(row => { const isAlreadySelected = this.selectedRows.some(selectedRow => selectedRow.id === row.id); if (isAlreadySelected) { this.$refs.multipleTable.toggleRowSelection(row, true); } }); } } }; </script> ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值