vue3 el-table 列增加 自定义排序逻辑

在 Vue 3 中使用 Element Plus 的 <el-table> 组件时,如果你想增加自定义排序逻辑,可以通过以下几个步骤实现:

1. 使用 default-sort 属性

首先,你可以在 <el-table> 组件上使用 default-sort 属性来指定默认的排序规则。例如,如果你想默认按照某一列升序排序,可以这样做:

复制代码
<template>
  <el-table :data="tableData" default-sort="{prop: 'date', order: 'ascending'}">
    <el-table-column prop="date" label="日期" sortable />
    <el-table-column prop="name" label="姓名" />
    <el-table-column prop="address" label="地址" />
  </el-table>
</template>

2. 使用 sort-methodsort-comparator 属性

对于自定义排序逻辑,你可以使用 sort-methodsort-comparator 属性。sort-method 适用于简单的比较函数,而 sort-comparator 适用于更复杂的排序逻辑,比如异步排序。

使用 sort-method
复制代码
<template>
  <el-table :data="tableData">
    <el-table-column prop="date" label="日期" sortable :sort-method="dateSortMethod" />
    <el-table-column prop="name" label="姓名" />
    <el-table-column prop="address" label="地址" />
  </el-table>
</template>
 
<script setup>
import { ref } from 'vue';
 
const tableData = ref([...]); // 你的数据数组
 
const dateSortMethod = (a, b) => {
  return new Date(a) - new Date(b); // 示例:按日期字符串排序
};
</script>
使用 sort-comparator(适用于 Element Plus)
复制代码
<template>
  <el-table :data="tableData">
    <el-table-column prop="date" label="日期" sortable :sort-comparator="dateComparator" />
    <el-table-column prop="name" label="姓名" />
    <el-table-column prop="address" label="地址" />
  </el-table>
</template>
 
<script setup>
import { ref } from 'vue';
 
const tableData = ref([...]); // 你的数据数组
 
const dateComparator = (a, b) => {
  return new Date(a.date) - new Date(b.date); // 按日期对象排序,确保数据对象中有 date 属性
};
</script>

3. 使用 sort-change 事件自定义排序行为(动态排序)

如果你需要在用户点击列头进行排序时执行更复杂的逻辑,可以使用 sort-change 事件。这个事件会在列头排序变化时触发,你可以在这个事件处理函数中实现自定义的排序逻辑。

复制代码
<template>
  <el-table :data="tableData" @sort-change="handleSortChange">
    <el-table-column prop="date" label="日期" sortable />
    <el-table-column prop="name" label="姓名" />
    <el-table-column prop="address" label="地址" />
  </el-table>
</template>
 
<script setup>
import { ref } from 'vue';
 
const tableData = ref([...]); // 你的数据数组
const handleSortChange = ({ column, prop, order }) => {
  if (prop === 'date') {
    // 根据日期进行排序的自定义逻辑,例如使用 lodash 的 sortBy 或其他方法进行排序。
    // 这里仅作为示例,实际应根据需求调整排序逻辑。
    if (order === 'ascending') {
      tableData.value.sort((a, b) => new Date(a[prop]) - new Date(b[prop]));
    } else if (order === 'descending') {
      tableData.value.sort((a, b) => new Date(b[prop]) - new Date(a[prop]));
    } else { // order 为 null 表示取消排序,重置数据等逻辑可在此处理。
      // 重置数据或按其他逻辑处理。
    }
  }
};
</script>
相关推荐
Younglina18 分钟前
一个纯前端的网站集合管理工具
前端·vue.js·chrome
木头程序员19 分钟前
前端(包含HTML/JavaScript/DOM/BOM/jQuery)基础-暴力复习篇
开发语言·前端·javascript·ecmascript·es6·jquery·html5
哈__28 分钟前
React Native 鸿蒙跨平台开发:PixelRatio 实现鸿蒙端图片的高清显示
javascript·react native·react.js
wszy180937 分钟前
外部链接跳转:从 App 打开浏览器的正确姿势
java·javascript·react native·react.js·harmonyos
pas13639 分钟前
31-mini-vue 更新element的children
前端·javascript·vue.js
码界奇点2 小时前
基于Vue3与TypeScript的后台管理系统设计与实现
前端·javascript·typescript·vue·毕业设计·源代码管理
计算机程序设计小李同学2 小时前
婚纱摄影集成管理系统小程序
java·vue.js·spring boot·后端·微信小程序·小程序
ashcn20012 小时前
水滴按钮解析
前端·javascript·css
爱吃奶酪的松鼠丶2 小时前
React长列表,性能优化。关于循环遍历的时候,key是用对象数据中的ID还是用索引
javascript·react.js·性能优化
xkxnq2 小时前
第二阶段:Vue 组件化开发(第 17天)
javascript·vue.js·ecmascript