在列中设置 sortable 属性即可实现以该列为基准的排序, 接受一个 Boolean,默认为 false。 可以通过 Table 的 default-sort 属性设置默认的排序列和排序顺序。 可以使用 sort-method 或者 sort-by 使用自定义的排序规则。 如果需要后端排序,需将 sortable 设置为 custom,同时在 Table 上监听 sort-change 事件, 在事件回调中可以获取当前排序的字段名和排序顺序,从而向接口请求排序后的表格数据。 在本例中,我们还使用了 formatter 属性,它用于格式化指定列的值, 接受一个 Function,会传入两个参数:rowcolumn, 可以根据自己的需求进行处理

在使用table的默认排序时不是很灵活了,官方给了一个更灵活的办法sort-by,如何使用呢?接下来举个例子。

有些数据不需要进行排序

<template>
<el-table
ref="tableEl"
:data="tableData"
style="width: 100%"
@sort-change="sortMethods"
>
<el-table-column prop="date" label="Date" sortable width="180" />
<el-table-column prop="name" label="Name" width="180" />
<el-table-column prop="address" label="Address" />
</el-table>
</template> <script lang="ts" setup>
import { ref } from 'vue' const tableEl = ref('') let tableData: User[] = ref([
{
date: '5',
name: 'Tom1',
address: 'No. 189, Grove St, Los Angeles',
},
{
date: '3',
name: 'Tom',
address: 'No. 189, Grove St, Los Angeles',
},
{
date: '2',
name: 'Tom',
address: 'No. 189, Grove St, Los Angeles',
},
{
date: '4',
name: 'Tom',
address: 'No. 189, Grove St, Los Angeles',
},
{
date: '3',
name: '不排序',
address: 'No. 189, Grove St, Los Angeles',
},
]) const sortMethods = (_column) => {
const { order, prop } = _column const list = []
tableData.value.forEach((_item) => {
list.push(_item)
}) if (order === 'ascending') {
tableData.value = list.sort((a, b) => {
let aVal = a[prop]
let bVal = b[prop]
if (a.name === '不排序' || b.name === '不排序') {
return 1
} return aVal -bVal
})
} else if (order === 'descending') {
tableData.value = list.sort((a, b) => {
let aVal = a[prop]
let bVal = b[prop]
if (a.name === '不排序' || b.name === '不排序') {
return 1
} return bVal - aVal
})
} else {
if (tableEl.value) {
tableEl.value.clearSort()
}
}
}
</script>

都看到这里了捎带脚重温一下数组的排序方法 sort()吧。

sort() 方法用原地算法对数组的元素进行排序,并返回数组。默认排序顺序是在将元素转换为字符串,然后比较它们的 UTF-16 代码单元值序列时构建的

参数
  • compareFn 可选

    用来指定按某种顺序进行排列的函数。如果省略,元素按照转换为的字符串的各个字符的 Unicode 位点进行排序。

    a第一个用于比较的元素。

    b第二个用于比较的元素。

如果指明了 compareFn ,那么数组会按照调用该函数的返回值排序。即 a 和 b 是两个将要被比较的元素:

  • 如果 compareFn(a, b) 大于 0,b 会被排列到 a 之前。
  • 如果 compareFn(a, b) 小于 0,那么 a 会被排列到 b 之前;
  • 如果 compareFn(a, b) 等于 0,a 和 b 的相对位置不变。备注:ECMAScript 标准并不保证这一行为,而且也不是所有浏览器都会遵守(例如 Mozilla 在 2003 年之前的版本);
  • compareFn(a, b) 必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。
compareFn(a, b) 返回值 排序顺序
> 0 ab
< 0 ab
=== 0 保持 ab 的顺序

element-ui组件Table排序(sort-by),某些数据无需排序的更多相关文章

  1. (Element UI 组件 Table)去除单元格底部的横线

    Element UI 组件 Table 有一个属性 border,添加它可以增加纵向边框,但是无法控制横线边框,因此即使是最简单的 el-table,也会包含一个底部横线. 这个底部横线其实是一个 b ...

  2. element ui组件的开始时间-结束时间验证

    <el-date-picker v-model="seach.before" type="date" placeholder="开始时间&quo ...

  3. vue-cli按需引入Element UI组件

    一.环境 使用vue-cli搭建的环境 二.安装 babel-plugin-component npm install babel-plugin-component -D 三.修改.babelrc文件 ...

  4. Element UI的Table用法

    Table 表格 用于展示多条结构类似的数据,可对数据进行排序.筛选.对比或其他自定义操作. ¶基础表格 基 2016-05-02 王小虎 上海市普陀区金沙江路 1518 弄 2016-05-04 王 ...

  5. Element UI组件说明

    -<el-card>-查询及展示列表页面-[v-show]属性控制显示隐藏-<el-card class="box-card" >-多标签页面-<el ...

  6. Element Ui中table实现表格编辑效果

    主要以css实现 .tb-edit .el-input, .tb-edit .el-input-number, .tb-edit .el-select { display: none; width: ...

  7. element ui 合计/table show-summary

    在el-table 上面加上show-summary就可以对table的数据进行合计 但是上次出现了合计栏有的为空,有的合计不对的情况,如果出现的是空,那么说明你渲染的数据有undefine(即后台返 ...

  8. element ui里面table分页,页数从0开始的怎么做?

    需求: 后台请求的接口是从0页开始的,但是pagination是从1开始的,就是在点击pagination的第1页是后台转0 1首先在data里面定义为1,其他地方也是定义1 return { for ...

  9. 怎么样使element ui 的table某列变色

    第一步.在el-table里面加上:row-style="rowClass" <el-table :data="targetCarList" border ...

  10. element ui的table的头部自定义

    <el-table-column label="级别" min-width="120" prop="clueLevel" align= ...

随机推荐

  1. 记一下Mybatis Plus遇到的现象

    使用Springboot+Mybaits plus,在Controller中直接调用Service中的方法,没有配置事务,就算是在Services上加了@Transactional也是没有事务的,可以 ...

  2. 用GPU来运行Python代码

    简介 前几天捣鼓了一下Ubuntu,正是想用一下我旧电脑上的N卡,可以用GPU来跑代码,体验一下多核的快乐. 还好我这破电脑也是支持Cuda的: $ sudo lshw -C display *-di ...

  3. python开发简单的命令行工具

    介绍 Python模块argparse,这是一个命令行选项,参数和子命令的解释器,使用该模块可以编写友好的命令行工具,在程序中定义好需要的参数,argparse将弄清楚如何解析 sys.argv中的参 ...

  4. ChatGPT:好家伙,每个人内心的一块魔镜

    这几天最火的话题就是ChatGPT,人人都在聊,人人都在社交圈或者vlog里面分享使用ChatGPT的聊天截图. 众生有众生相,每个人对这个AI工具有不同的感受和反应.我个人是非常接受ChatGPT, ...

  5. Laravel 刚创建的项目 API 无法使用 Session,是没有在Api的请求内开启Session

  6. 2211-22学习记录之python百分数,time模块

    百分数 print(' {:.0%}'.format(84/100)) 输出为84% 以上百分数输出是使用到了字符串格式化函数format(),在其中将分数42/50作为值给传递了进去.如果将分子分母 ...

  7. 函数式编程:Flutter&Dart中的组合

    本文翻译自: Composition in Flutter & Dart 在 Flutter & Dart 中使用组合创建模块化应用程序. 什么是组合? 在dictionary.com ...

  8. JZOJ 2020.07.16【NOIP提高组】模拟

    总结 这套题相比昨天,简单了不止一点 然而有的人拿了 \(300\) 多 而我只有 \(198\) 预估应该有 \(268\) 的,假了 \(70\) 分 出现了很多奇怪的 \(mistakes\) ...

  9. JR文摘_TNFi和阿贝西普降低RA患者CVD风险

    转自 Dr Jack Cush的Twitter (2020-08-19) JR文摘: 18754例RA患者前瞻性观察到1801次CVD事件,与csDMARDs相比, TNFi(HR: 0.82, 95 ...

  10. 三天吃透Java并发八股文!

    本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...