Vue2: 创建一个可多选的Table,并回显数据选中状态

59 篇文章 ¥19.90 ¥99.00

如图,需要创建一个含有checkBox的允许多选的表格,并在表格初始化的时候,根据初始状态回显数据的选中状态,即设置哪条数据是选中的,哪条是未被选中的。

1、创建table

 手动添加一个el-table-column,设type属性为selection即可:

<el-table
    ref="multipleTable"
    :data="tableData"
    tooltip-effect="dark"
    style="width: 100%"
    @selection-change="handleSelectionChange">
    <el-table-column type="selection" width="55">
    </el-table-column>
    <!--其它数据项-->
  </el-table>

2、初始化时回显人员选中状态


                
<think>嗯,用户遇到了el-table数据回显的问题,无法正确显示已项。我需要先回忆一下Element UI中el-table功能是如何工作的。通常,使用el-table时,通过设置type="selection"来启用列。数据回显的关键在于row-key和reserve-selection属性,以及正确设置selected数组。 首先,row-key必须正确绑定到每行数据的唯一标识字段,比如id。如果row-key没有正确设置,el-table可能无法正确跟踪每一行的选中状态,导致回显失败。另外,在初始化表格数据后,可能需要手动调用toggleRowSelection方法来设置初始选中的行。这是因为如果数据是异步加载的,比如从API获取,表格可能在数据加载前已经渲染,这时候需要等数据加载完毕后再设置选中状态。 用户可能在异步加载数据的情况下,没有在数据加载完成后调用toggleRowSelection,或者没有正确设置row-key,导致表格无法正确识别每行的唯一性。此外,如果保留选中状态的功能未开启(reserve-selection),在分页或数据更新时,之前的选中状态可能会丢失,影响回显效果。 接下来,我需要提供一个示例代码,展示正确的配置方法。包括设置row-key,使用reserve-selection,以及在数据加载后调用toggleRowSelection。同时,需要解释每个步骤的作用,帮助用户理解问题所在。 然后,要列举常见的问题原因,比如row-key未设置或错误、未在数据加载后设置选中状态、未使用reserve-selection等。针对每个原因给出解决方案,比如确保row-key正确绑定唯一字段,在数据加载完成后遍历选中数组调用toggleRowSelection,以及在列上添加reserve-selection属性。 最后,提出相关问题,覆盖el-table的其他常见问题,比如分页保留选中、默认排序、动态加载数据保持选中状态,以及自定义筛逻辑。这些问题可以帮助用户进一步理解和解决类似的问题。</think><< 当使用Element UI的el-table进行数据回显时,常见问题通常由以下原因引起: 1. **未正确设置row-key** ```vue <el-table :data="tableData" ref="multipleTable" row-key="id" // 必须设置唯一标识 @selection-change="handleSelectionChange"> <el-table-column type="selection" reserve-selection></el-table-column> // 其他列... </el-table> ``` **原因**:当表格数据存在分页或动态更新时,必须通过row-key维护行标识,否则组件无法正确追踪选中状态 2. **异步数据加载时序问题** ```vue async loadData() { const res = await fetchData(); this.tableData = res.data; // 必须在数据加载完成后执行 this.$nextTick(() => { this.selectedRows.forEach(row => { const target = this.tableData.find(item => item.id === row.id); this.$refs.multipleTable.toggleRowSelection(target, true); }); }); } ``` **原因**:需要在数据完全加载到DOM后,通过refs手动设置选中状态 3. **未使用reserve-selection属性** ```vue <el-table-column type="selection" reserve-selection :reserve-selection="true"> </el-table-column> ``` **原因**:当表格存在分页时,该属性可以保持跨页的选中状态记录 完整解决方案示例: ```vue <template> <el-table ref="multipleTable" :data="tableData" row-key="id" @selection-change="handleSelectionChange"> <el-table-column type="selection" reserve-selection> </el-table-column> <!-- 其他列 --> </el-table> </template> <script> export default { data() { return { tableData: [], selectedRows: [] // 存储需要回显的已数据 }; }, async mounted() { await this.loadData(); this.restoreSelection(); }, methods: { async loadData() { // 模拟异步请求 this.tableData = await fetchData(); }, restoreSelection() { this.$nextTick(() => { this.selectedRows.forEach(selected => { const row = this.tableData.find(item => item.id === selected.id); if (row) { this.$refs.multipleTable.toggleRowSelection(row, true); } }); }); }, handleSelectionChange(val) { this.selectedRows = val; } } }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值