el-table select 多选框如何实现选中数据回显

解决表格中用户勾选内容在页面重新加载后丢失的问题。通过监听表格选择变化并记录所选项目的ID,在页面重新加载时根据ID恢复选择状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现象描述:
将用户勾选的内容添加到表格,当页面还未关闭时,选项还是正常勾选,但是只要退出该页面,再进来就会发现勾选被取消了

需求描述:
已选择项默认勾选,且表格内容更改,勾选项也同步更改

<el-table :data="testItemList" ref="testItemLists" :header-cell-style="{ background: '#f4f3f9', color: '#606266' }"  @selection-change="handleTestItem">
    <el-table-column prop="is_selected" type="selection" width="55" label="全选"></el-table-column>
    <el-table-column type="index" label="序号" :index="(index) => { return (index + 1) }"></el-table-column>
    <el-table-column prop="kind_name" label="名称"></el-table-column>
</el-table>

toggleSelectionItem() { // 在获取testItemList后 执行该函数
  let match_ids = this.testItemList.map(item => item._id);	// 获取选择项
  let testItemInfo = this.testItemInfo || []; // 获取所有项
  let match_row = testItemInfo.filter(item => {
    return match_ids.indexOf(item._id) != -1
  })
  this.$nextTick(() => {
    this.$refs.testItemLists.clearSelection();
    match_row.forEach(row => {
      this.$refs.testItemLists.toggleRowSelection(row);
    })
  })
},

效果如下:
在这里插入图片描述

### Vue3 中实现 el-table 多选框状态回显的方法 在 Vue3 的项目中,`el-table` 组件的多选框功能可以通过 `toggleRowSelection` 方法来设置某一行或行的勾状态。为了实现多选框的状态回显,通常需要结合后端返回的数据中的特定字段(如 `isSelect`),并通过 `$refs` 访问表格实例调用该方法。 以下是具体的实现方式: #### 数据准备 假设从后端获取到的数据结构如下: ```javascript const tableData = [ { id: 1, name: 'Item 1', isSelect: true }, { id: 2, name: 'Item 2', isSelect: false }, { id: 3, name: 'Item 3', isSelect: true } ]; ``` 其中,`isSelect` 字段用于标记当前行是否被勾--- #### 实现代码 通过 `this.$nextTick()` 确保 DOM 更新完成后执行操作,并利用 `toggleRowSelection` 设置每一行的勾状态。 ```vue <template> <el-table ref="multipleTable" :data="tableData" style="width: 100%" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55"></el-table-column> <el-table-column prop="name" label="名称" width="180"></el-table-column> </el-table> </template> <script> import { onMounted, reactive, toRefs } from "vue"; export default { setup() { const state = reactive({ tableData: [ { id: 1, name: "Item 1", isSelect: true }, { id: 2, name: "Item 2", isSelect: false }, { id: 3, name: "Item 3", isSelect: true }, ], }); const handleSelectionChange = (val) => { console.log(val); }; const initSelection = () => { nextTick(() => { state.tableData.forEach((item) => { if (item.isSelect) { this.$refs.multipleTable.toggleRowSelection(item, true)[^2]; } }); }); }; onMounted(() => { initSelection(); }); return { ...toRefs(state), handleSelectionChange, }; }, }; </script> ``` --- #### 关键点解析 1. **数据绑定** 将后端返回的数据绑定至 `el-table` 的 `data` 属性上,确保每一条记录都带有 `isSelect` 字段以指示其初始勾状态。 2. **DOM 渲染完成后的回调** 使用 `this.$nextTick()` 或 Vue3 提供的 `nextTick` API,在组件渲染完毕后再执行逻辑,从而避免因 DOM 还未更新而导致的操作失败[^3]。 3. **动态设置勾状态** 遍历数据列表,对于满足条件的项(即 `isSelect === true`),调用 `toggleRowSelection` 方法将其设为已勾状态[^4]。 4. **注意事项** 如果使用的 UI 库不是 Element Plus 而是其他库(如 Umy-UI),可能需要调整访问表格实例的方式,例如 `.singleTable` 替代默认的 `multipleTable`[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

攻城狮炭烤策划

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值