前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >el-table实现动态数据的实时排序,一篇文章讲清楚elementui的表格排序功能,利用@sort-change实现动态数据排序,el-table排序方法,el-table可变数据的动态排序

el-table实现动态数据的实时排序,一篇文章讲清楚elementui的表格排序功能,利用@sort-change实现动态数据排序,el-table排序方法,el-table可变数据的动态排序

作者头像
watermelo37
发布于 2025-01-22 13:28:03
发布于 2025-01-22 13:28:03
45400
代码可运行
举报
文章被收录于专栏:前端专精前端专精
运行总次数:0
代码可运行

写这篇博客的原因是前段时间做了一个数据列可变的表格,同时需要实现在网页中更新了数据列之后,能够对表格进行排序的需求。如果想要直接了解实现el-table的动态数据动态排序(列数据是通过计算获得,并且可以在页面中修改,在此基础上实现数据变化后实时更新)。请直接跳到第三章:当数据列是不确定数据时,实现列排序功能

一、el-table的排序功能

在列的标签中添加 sortable 即可添加列排序标签,可添加多个。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <el-table :data="rankingDataFormatted" stripe>
      <el-table-column
        prop="ranking"
        label="Rank"
        width="100"
      ></el-table-column>
      <el-table-column
        prop="cityName"
        label="Country"
        width="200"
      ></el-table-column>
      <el-table-column
        prop="score"
        label="Score"
        width="200"
        sortable
      ></el-table-column>
      <el-table-column prop="performance" label="Performance">
      </el-table-column>
    </el-table>

效果是这样的:

二、el-table的自定义排序功能

添加 sortable 标签是默认排序,添加 sort-method 或者 sort-by 则可以使用自定义的排序规则。

其中scoreOrder是一个定义在methods中的排序方法(如果是composition API就直接const scoreOrder = (参数)=> {方法体})。

这个方法接受两个参数,代表要进行比较的两行数据,可以通过读取对应属性(比如这里对应的属性名是score)来进行比较,该方法接受一个返回值,返回-1代表第一个参数应排在第二个参数之前,返回1代表之后,也可以返回零,一般表示相等,实际使用中不太用的上。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <el-table :data="rankingDataFormatted" stripe>
      <el-table-column 
        type="index" 
        label="Rank" 
        width="100"
      ></el-table-column>
      <el-table-column
        prop="cityName"
        label="Country"
        width="200"
      ></el-table-column>
      <el-table-column
        prop="score"
        label="Score"
        width="200"
        :sort-method="scoreOrder"
      ></el-table-column>
      <el-table-column prop="performance" label="Performance">
      </el-table-column>
    </el-table>

随便举个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
methods(){
    scoreOrder(a, b) {
      // 自定义排序逻辑
      if (a.score< b.score) {
        return -1;
      }
      if (a.score> b.score) {
        return 1;
      }
      // 相同则返回0,表示不变
      return 0;
    },
}
//如果是composition API

    const scoreOrder = (a, b) => {
      // 自定义排序逻辑
      if (a.score< b.score) {
        return -1;
      }
      if (a.score> b.score) {
        return 1;
      }
      // 相同则返回0,表示不变
      return 0;
    },

三、当数据列是不确定数据时,实现列排序功能

现在来聊一聊关于不确定数据/可变数据的情况,elementui目前提供的主流排序方法就是以上两种,也能解决大多数问题,但在解决实际需求时发现有时候我们用来排序的数据并不是一开始就能够获取的,而是可变的、计算的、实时变化的。

如下图所示,formatScore是一个计算方法,此时Score这一列的数据是获取不到的,这样通过 sort-method 获得的行数据是null或者undefined。

此时就要用到 @sort-change 事件了,在elementui官方文档里是这么表述这个事件的:

当表格的排序条件发生变化的时候会触发该事件 如果需要后端排序,需将 sortable 设置为 custom,同时在 Table 上监听 sort-change 事件, 在事件回调中可以获取当前排序的字段名和排序顺序,从而向接口请求排序后的表格数据。

由于官方没有具体的举例,“后端排序”乍看好像格外高级,事实上这里的后端排序指的就是给你监听一个事件,你自己(在后端)写一个排序的API就行,这样获取数据的时候就是排好序的数据。也就是说“后端排序”并不一定要在后端完成,搞懂了原理就在前端写是一样的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <el-table :data="rankingDataFormatted" stripe @sort-change="tableSort">
      <el-table-column 
        type="index" 
        label="Rank" 
        width="100"
      ></el-table-column>
      <el-table-column
        prop="cityName"
        label="Country"
        width="200"
      ></el-table-column>
      <el-table-column label="Score" width="200" sortable="custom">
        <!-- 实现可变数据的动态排序 -->
        <template v-slot="scope">
          {{ formatScore(scope.row) }}
        </template>
      </el-table-column>
      <el-table-column prop="performance" label="Performance">
      </el-table-column>
    </el-table>

在点击排序按钮时就能触发tableSort方法,按实际需求完成tableSort方法的逻辑,给个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const tableSort = ({ column, prop, order }) => {
  // 直接使用array.sort()方法,对原始数组数据进行处理
  rankingDetailData.sort((a, b) => {
    const scoreA = formatScore(a);
    const scoreB = formatScore(b);
    if (order === "ascending") {
      return scoreA - scoreB;
    } else {
      return scoreB - scoreA;
    }
  });
};

如上所示,添加了 sortable="custom" 和 @sort-change 之后,本质就是让原先的排序按钮失效,并且监听该事件的发生,至于监听后到底触发什么事件,是按某种方式排序,还是弹出一个窗口,甚至关闭浏览器都可以自定义,这才是官方文档中“后端排序”的本质原理。

Element Plus官网Table:Table 表格 | Element Plus

博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Vue 实现表格搜索、固定表头与排序 原
在搜索完,删除搜索内容后展示所有的内容,用computed就比较容易实现,思路:v-model绑定搜索关键字,在tbody的tr上v-for循环计算属性。methods也可以实现需要改成
tianyawhl
2019/04/04
2.5K0
Vue + Element UI 实现权限管理系统 前端篇(十二)
 而具体的Mock接口,把根路径移除,因为在生成Mock的时候会自动把根路径加上去。
朝雨忆轻尘
2019/06/18
1.4K0
后台管理系统之Table表格展示数据的使用
当el-table元素中注入data对象数组后,在el-table-column中用prop属性来对应对象中的键名即可填入数据,用label属性来定义表格的列名。可以使用width属性来定义列宽。
HelloWorldZ
2024/03/20
3010
后台管理系统之Table表格展示数据的使用
vue+element table的二次封装
很多人不明白为什么这里要加一个slot,这个封装实际上就是把前面的tableList 作为一个 prop 传入,通过这个属性,我们就可以在table中编辑任何简单或者复制的列, 完美~
用户2323866
2021/06/24
1.1K0
深入探讨 ElementUI 动态渲染 el-table
在前端开发中,表格是不可或缺的一部分。无论是数据展示、数据录入,还是数据分析,表格都扮演着重要的角色。而在 Vue.js 生态系统中,ElementUI 提供了一个强大且灵活的表格组件——el-table。本文将带你深入了解如何使用 ElementUI 动态渲染 el-table,并详细探讨其原理及实现过程。
繁依Fanyi
2024/07/03
7830
表格中添加渐变色带,表格中添加多色色带,el-table中添加渐变色带,elementUI表格添加色带
  performance为渐变色带,能大幅提升可视化效果,优雅美观,同时也可以自定义程度,比如60以下就需要警告或者表示危险,就可以用红色渐变绿色,将渐变点设置在60%的位置,这样渐变色带在美观的同时本身也能带有更多的信息。
watermelo37
2025/01/22
460
表格中添加渐变色带,表格中添加多色色带,el-table中添加渐变色带,elementUI表格添加色带
el-table 多表格弹窗嵌套数据显示异常错乱问题
使用vue+element开发报表功能时,需要列表上某列的超链接按钮弹窗展示,在弹窗的el-table列表某列中再次使用超链接按钮点开弹窗,以此类推多表格弹窗嵌套,本文以弹窗两次为例 最终效果如下示例页面
GoodTime
2024/03/05
2760
el-table 多表格弹窗嵌套数据显示异常错乱问题
el-table分页数据+回显+勾选状态+记录数据(map实战)
原以为js中即便是学到了map可实际上也不会用到map,可我今天就遇到一个el-table分页查询,然后需要勾选表格内容,切换页码后回显勾选项的需求。 一开始想的是,把所有已勾选的数据用list来维护,可稍微一思索就发现这样实际执行起来还是有缺陷的,比如用于来回切换页码等场景稍微一复杂就容易乱套。还是应该记录每一条数据的信息,用户点击勾选的时候,用当前的勾选情况去跟已勾选的数据做一个比对。如果已记录的数据里存在当前列表中的勾选项,同时本次属于勾选状态,则不做处理。如果处于未勾选状态,则从用于记录的总数据中删除该选项。如果总得记录结果没有改数据,同时该数据本次是勾选状态,则把新数据添加进去。 用map是最好的了,于是就实战一下,试试手~
伯约同学
2022/04/13
2K0
sortablejs插件在el-table中的运用
中文文档:https://www.itxst.com/sortablejs/neuinffi.html
猫老师的叶同学
2023/03/01
1.3K0
sortablejs插件在el-table中的运用
Element Table 业务封装与思考
新项目 Elemnet UI 组件业务封装,封装需求满足后期不修改业务代码,直接更新前端的封装组件的UI库代码即可实现无缝切换UI库的需求。目前新项目的功能产品还在梳理,项目第一期还未开始,前端技术小组先行进行的组件封装。
草帽lufei
2022/07/29
5420
Element Table 业务封装与思考
table表格拖拽
el-table 的拖拽使用 Sortable.js 官方文档 :https://github.com/SortableJS/Sortable
leader755
2022/03/09
2.8K1
ElementUI实现表格分页功能
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>表格数据分页</title> <link rel="stylesheet" hr
明知山
2020/09/03
1.4K0
ElementUI 基于vue+sortable.js实现表格行拖拽
http://www.itxst.com/sortablejs/neuinffi.html
授客
2021/02/25
3.5K0
vue+Element实现固定表头、左侧列、搜索、排序与分页
(adsbygoogle = window.adsbygoogle || []).push({});
tianyawhl
2019/04/04
6.4K0
Element-ui Table表格导出功能的实现
心安事随
2024/07/29
3160
Element-ui Table表格导出功能的实现
深入探索 ElementUI el-table 行列合并
在前端开发中,数据展示一直是一个重要的部分,而表格则是数据展示最常见的形式之一。ElementUI 是饿了么前端团队推出的一款基于 Vue 的 UI 组件库,其中的 el-table 组件是一个功能强大且灵活的表格组件。今天我们要详细探讨的是 el-table 的行列合并操作。
繁依Fanyi
2024/06/30
1.1K0
Element 表格排序
见官网的介绍,在列中设置sortable属性即可实现以该列为基准的排序,可以通过Table的default-sort属性设置默认的排序列和排序顺序。可以使用sort-method使用自定义的排序规则。
tianyawhl
2020/12/29
2K0
el-table 分页全选功能讲解
我们在用 el-table 组件的时候,肯定会用到分页功能,不管是长列表下拉分页还是用 element-UI 的 el-pagination 分页。
CRMEB商城源码
2022/06/20
2.1K0
element关于table拖拽排序问题
博客地址:http://www.globm.top/blog/1/detail/41 最近在使用element table的时候,经常会遇到排序的问题,如果只是简单的排序的话,element官方已经给出了指定的方法
全栈程序员站长
2022/07/05
1.2K0
element 嵌套数据合并单元格两种处理方法
通过table传入span-method方法可以实现合并行或列,方法的参数是一个对象,里面是{row, column, rowIndex, columnIndex} 四个属性,该函数返回包含两个元素的数组,第一个代表rowspan,第二个代表colspan。也可以返回一个键名为rowspan 和 colspan的对象
tianyawhl
2020/06/28
4.6K2
相关推荐
Vue 实现表格搜索、固定表头与排序 原
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文