当前位置: 首页 > news >正文

009:vue结合el-table实现表格行拖拽排序(基于sortablejs)

文章目录

  • 1. 实现效果
  • 2. 安装 `sortablejs` 插件
  • 3. 完整组件代码
  • 4. 注意点

1. 实现效果

请添加图片描述

2. 安装 sortablejs 插件

sortablejs 更多用法

cnpm i --save sortablejs

3. 完整组件代码

<template><div class="home"><div class="body"><el-table :data="tableData" border row-key="date" class="draggable-table" style="width: 100%"><el-table-column prop="sortNo" label="序号"><template slot-scope="{ row }"><imgclass="handle":src="require('./icon-drop.png')"style="width: 20px; height: 20px; object-fit: contain"/></template></el-table-column><el-table-column prop="date" label="日期"></el-table-column><el-table-column prop="name" label="姓名"></el-table-column><el-table-column prop="address" label="地址"></el-table-column></el-table></div></div>
</template><script>import Sortable from 'sortablejs'export default {name: 'Demo',data() {return {tableData: [// 略去数据,与前段代码一直{ date: '2024-01-02', name: '张三1', address: '深圳市' },{ date: '2024-01-03', name: '李四2', address: '成都市' },{ date: '2024-01-04', name: '王五3', address: '重庆市' },{ date: '2024-01-05', name: '麻六4', address: '上海市' },{ date: '2024-01-07', name: 'kk5', address: '上海市01' },{ date: '2024-01-08', name: 'fantay6', address: '上海市02' },],}},mounted() {const tbody = document.querySelector('.draggable-table .el-table__body-wrapper tbody')new Sortable(tbody, {handle: '.handle', // handle's classanimation: 150,// 需要在odEnd方法中处理原始eltable数据,使原始数据与显示数据保持顺序一致onEnd: ({ newIndex, oldIndex }) => {const targetRow = this.tableData[oldIndex]this.tableData.splice(oldIndex, 1)this.tableData.splice(newIndex, 0, targetRow)console.table(this.tableData)},})},}
</script><style scoped lang="scss">.home {.body {width: 890px;height: 500px;border: #ff3366 solid 10px;box-sizing: border-box;padding: 20px;box-sizing: border-box;}}.handle {cursor: move;display: flex;align-content: center;}
</style>

4. 注意点

  1. 很多文章使用 Sortable.create 但是我这样用没生效,使用 new Sortable 就行了
  2. 页面table添加类 draggable-table
  3. handle 可以配置可拖拽的指定元素,默认是当前行触发

相关文章:

  • 微软发布安卓版Copilot,可免费使用GPT-4、DALL-E 3
  • 如何将语音版大模型AI接入自己的项目里(语音ChatGPT)
  • 计算机视觉与自然语言处理(Open AI)
  • 12月27日,每日信息差
  • 第四章 Consul服务注册与发现
  • Selenium库和ChromeDriver谷歌驱动最新版安装
  • 面试经典150题(50-53)
  • 垃圾收集器与内存分配策略
  • linux用户态与内核态通过字符设备交互
  • Appium+python自动化(二)- 环境搭建—下(超详解)
  • ajax的完整写法——success/error/complete+then/catch/done+设置请求头两种方法——基础积累
  • 右键菜单“以notepad++打开”,在windows文件管理器中
  • Spring实战系列(三)了解容器的基本实现
  • 数据库索引简析
  • 力扣201. 数字范围按位与
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • Django 博客开发教程 16 - 统计文章阅读量
  • ES6之路之模块详解
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • flask接收请求并推入栈
  • If…else
  • java取消线程实例
  • JDK9: 集成 Jshell 和 Maven 项目.
  • jquery ajax学习笔记
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • spring + angular 实现导出excel
  • Swoft 源码剖析 - 代码自动更新机制
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 诡异!React stopPropagation失灵
  • 每天10道Java面试题,跟我走,offer有!
  • 日剧·日综资源集合(建议收藏)
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 昨天1024程序员节,我故意写了个死循环~
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​力扣解法汇总946-验证栈序列
  • ​如何在iOS手机上查看应用日志
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • # include “ “ 和 # include < >两者的区别
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (03)光刻——半导体电路的绘制
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (Java)【深基9.例1】选举学生会
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (四)鸿鹄云架构一服务注册中心
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • ***通过什么方式***网吧
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .net MySql
  • .NET连接数据库方式
  • .NET学习全景图