el-table,sort-change容易引发的bug

本文讲述了在使用ElementUI的elementel-table实现表格排序功能时遇到的问题,即sort-change和sortable事件冲突导致数据展示异常。作者发现sort-change影响ElTableBody内的数据,而sortable则不影响data。解决方法是将sortable设置为custom属性,仅触发自定义的sort-change方法。

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

最近做了一个功能,使用element el-table组件实现表格,并实现部列的排序功能,看似很简单的功能,按照el-table组件文档开始开发。

image.png

 配置如下图

image.png

因为需要根据后端接口排序,我又在上加入了一个sort-change 事件,调试的时候问题就来了,执行了sort-change事件之后,tableData获取到的数据和table表格展示的数据顺序不同。 经过研究发现,是因为sort-change和sortable两个事件都触发导致,应该去掉一个事件。 el-table-column这个sort 它不影响:data中的tableData,它影响的是ElTableBody里面写的数据,排序后tableData中的dataArray和ElTableBody中的dataArray两者数组内元素的顺序不一致。 sort-change 事件则是用户自己定义的一个方法。 修改方法:把每个el-table-column的sortable写成custom 属性。这样就只触发sort-change中的方法了。

image.png

image.png

### Vue 中 `el-table` 组件 `expand-change` 事件的使用 在 Vue 应用程序中,Element UI 提供了丰富的组件来简化前端开发工作。对于表格组件 (`el-table`) 而言,其支持多种交互方式之一就是通过展开行(`expand`)功能实现更复杂的数据展示逻辑。 当涉及到异步加载子项数据时,可以利用 `expand-change` 事件监听用户的操作行为,在每次用户点击展开/收起某一行的时候触发相应的处理函数[^1]。 #### 处理流程说明 每当发生扩展变化时,会传递两个参数给回调函数:一个是当前被改变状态的那一行记录对象;另一个则是整个已展开行组成的数组列表。基于此机制,可以在接收到这些信息之后发起网络请求获取额外的信息并更新到界面上显示出来。 #### 实现代码示例 下面是一个简单的例子展示了如何结合 `axios` 来完成这一过程: ```javascript <template> <div id="app"> <!-- 定义 table 并绑定 expand-change --> <el-table :data="tableData" @expand-change="handleExpandChange"> <el-table-column type="expand"> <template slot-scope="props"> <p v-for="(item, index) in props.row.children">{{ item.name }}</p> </template> </el-table-column> <el-table-column label="日期" prop="date"></el-table-column> <el-table-column label="姓名" prop="name"></el-table-column> </el-table> </div> </template> <script> import axios from 'axios'; export default { data() { return { tableData: [ // 初始数据集... ] }; }, methods: { handleExpandChange(row, expandedRows) { const loadingIndex = this.tableData.indexOf(row); if (!row._loading && !row.children) { row._loading = true; setTimeout(() => { // 模拟异步请求延迟 axios.get('/api/getChildren', { params: { parentId: row.id } }) .then(response => { this.$set(this.tableData[loadingIndex], 'children', response.data); row._loading = false; }); }, 500); // 延迟时间设置为半秒 } } } }; </script> ``` 在这个案例里,首先定义了一个基础表格结构,并绑定了 `@expand-change` 方法用于响应用户的动作。接着,在 JavaScript 部分实现了具体的业务逻辑——即根据传入的 `row` 参数判断是否已经存在对应的子级数据,如果没有则执行一次模拟的 API 请求去拉取新资料填充至视图当中。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值