在列中设置 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. ionic+vue+capacitor系列笔记--手机从安卓10升级到安卓11以后,之前的代码不管用了,无法跳转其他应用

    之前手机是安卓10版本,没什么问题,升级以后,手机出现了一些异常,发现原来代码里写的跳转功能,无法使用了哦~~脑壳痛 解决方案 本项目:build.gradle targetSdkVersion 30 ...

  2. 对象的反序列化流_ObjectInputStream类

    对象的反序列化流_ObjectInputStream类 ObjectInputStream反序列化流,将之前使用ObjectOutputStream序列化的原始数据恢复为对象. 构造方法 public ...

  3. drf-认证、权限、频率、过滤、排序、分页

    1.认证组件 1.1 局部认证 1.首先写两个接口,一个查询单个一个查询所有,我们利用视图扩展类和视图子类写在一个视图类上: views.py: from rest_framework.viewset ...

  4. JavaScript 疑难记录(未解决)

    异步迭代器与生成器的联系和区别

  5. gitlabApi如何获取项目文件夹的commitId

      在我们做配置管理系统和gitlab系统集成的时候,有一个常见的场景,就是要获取某个文件的commitId,来记录本次配置文件提交的版本.这个通过gitlabApi很容易实现: GET /proje ...

  6. P22_条件渲染

    条件渲染 wx:if 在小程序中,使用 wx:if="{{condition}}" 来判断是否需要渲染该代码块: 也可以用 wx:elif 和 wx:else 来添加 else 判 ...

  7. 字符串(str)内置方法补充、列表(list)内置方法、可变类型与不可变类型、队列和栈

    目录 一.字符串(str)的内置方法(补充) 了解方法 二.列表(list)的内置方法 三.可变类型与不可变类型 四.队列和栈 一.字符串(str)的内置方法(补充) # upper()把当前字符串中 ...

  8. 【KAWAKO】deepface-在基于m1芯片的macbook上进行安装

    ​目录 前言 本机配置 安装miniforge tips 安装tensorflow 安装deepface及相关库 Reference 前言 deepface是一款"即插即用"的人脸 ...

  9. 使用一个文件集中管理你的 Nuget 依赖版本号

    在 .net 7 以前,项目对于 nuget 依赖项的版本依赖散落与解决方案的各个角落.这导致升级维护和查看的时候都比较麻烦.在 .net 7 中,你可以使用一个文件来集中管理你的 Nuget 依赖版 ...

  10. SQL 注入之一:Mysql 数据库(搞懂这篇就够了)

    郑重声明: 本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关.倡导维护网络安全人人有责,共同维护网络文明和谐. SQ ...