《ElementUI/Plus 基础知识》el-table + sortablejs 实现 row 拖动改变顺序(Vue2/3适用)

ops/2024/9/23 4:52:14/

前言

使用如下技术:

  • ElementPlus Table 组件;
  • 插件 sortablejs ( npmjs/Github 地址);

实现

html

  • 代码第 1 行,属性 row-key 一定要设置,否则会报错。即行数据的 Key,用来优化 table 的渲染;
  • 如果想看效果,请异步 《ElementUI/Plus 踩坑》el-table + sortablejs 拖拽顺序错乱;
<el-table class="my-table" :data="tableData" style="width: 100%" row-key="id"><el-table-column prop="date" label="Date" width="180" /><el-table-column prop="name" label="Name" width="180" /><el-table-column prop="address" label="Address" />
</el-table>

JavaScript

  • 代码第 1 行,引入插件 sortablejs
  • 代码第 3 行,获取标签 tbody,注意是表格 row 元素列表的上一级;
  • 代码第 6 行,监听 row 元素拖动结束事件 onEnd。且获取元素的原始索引 oldIndex新索引 newIndex
  • 代码第 9 - 12 行,原始数据不会修改,所以要在此修改;
import Sortable from 'sortablejs'const el = document.querySelector('.my-table tbody');
const that = this;
Sortable.create(el, {onEnd({ newIndex, oldIndex }) {let arr = that.tableData;// 获取移动的 itemconst dragItem = arr.splice(oldIndex, 1)[0];// 插入新位置arr.splice(newIndex, 0, dragItem);}
});

完成代码

<template><el-table class="my-table" :data="tableData" style="width: 100%" row-key="id"><el-table-column prop="date" label="Date" width="180" /><el-table-column prop="name" label="Name" width="180" /><el-table-column prop="address" label="Address" /></el-table></template><script>
import Sortable from 'sortablejs'
export default {data() {return {tableData: [{id: 'ID_001',date: '2004-01-01',name: 'Tom11111',address: 'No. 001, Grove St, Los Angeles',},{id: 'ID_002',date: '2014-01-02',name: 'Tom22222',address: 'No. 002, Grove St, Los Angeles',},{id: 'ID_003',date: '2024-01-03',name: 'Tom33333',address: 'No. 003, Grove St, Los Angeles',},{id: 'ID_004',date: '2034-01-04',name: 'Tom44444',address: 'No. 004, Grove St, Los Angeles',},{id: 'ID_005',date: '2044-01-05',name: 'Tom55555',address: 'No. 005, Grove St, Los Angeles',},{id: 'ID_006',date: '2054-01-06',name: 'Tom66666',address: 'No. 006, Grove St, Los Angeles',},]}},methods: {  initDrag() {const el = document.querySelector('.my-table tbody');const that = this;Sortable.create(el, {onEnd({ newIndex, oldIndex }) {let arr = that.tableData;// 获取移动的 itemconst dragItem = arr.splice(oldIndex, 1)[0];// 插入新位置arr.splice(newIndex, 0, dragItem);}});}},mounted() {this.$nextTick(()=>{this.initDrag()})},
}
</script>

效果

在这里插入图片描述


http://www.ppmy.cn/ops/114588.html

相关文章

项目第十弹:连接管理模块与服务器模块

项目第十弹&#xff1a;连接管理模块与服务器模块 一、连接管理模块的设计1.连接模块的设计2. 连接管理模块的设计1.连接ID? TcpConnectionPtr&#xff01;&#xff01; 二、连接管理模块的实现1.连接模块的实现2.连接管理模块的实现 三、服务器模块的设计1.前言2.设计 四、服…

go webapi上传文件 部属到linux

go厉害的地方&#xff0c;linux服务器上无需安装任务依赖就可以运行&#xff0c;大赞&#xff01; 一、编译 #在Goland中cmd中执行 go env -w GOARCHamd64 go env -w GOOSlinux go build main.go # 切换回来 否则无法运行 go env -w GOOSwindows go run main.go 拷贝到linux服…

ALSA ubuntu 编译

1、下载tar包:alsa-lib、alsa-utils GitHub - alsa-project/alsa-lib: The Advanced Linux Sound Architecture (ALSA) - library&#xff08;核心库&#xff09; GitHub - alsa-project/alsa-utils: The Advanced Linux Sound Architecture (ALSA) - utilities(工具库) 2、…

基于Java的SSM(Spring、Spring MVC、MyBatis)框架构建的远程诊断系统

基于Java的SSM&#xff08;Spring、Spring MVC、MyBatis&#xff09;框架构建的远程诊断系统&#xff0c;适用于医疗、工业设备监测等多个领域。这样的系统通常需要具备实时数据采集、数据分析、故障诊断等功能。下面是一个简化的系统设计方案&#xff0c;以及一些关键组件和技…

C++primer第十一章使用类(矢量随机游走实例)

操作符重载 操作符重载(operator overoading)是一种形式的 C多态。 第8章介绍了C是如何使用户能够定义多个名称相同但特征标(参数列表)不同的函数的。这被称为函数重载(function overloading)或函数多态(functional polymorphism)&#xff0c;旨在让您能够用同名的函数来完成…

Ubuntu 安装和使用 Fcitx 中文输入法;截图软件flameshot

一、Ubuntu 安装和使用 Fcitx 中文输入法 在 Ubuntu 上安装和使用 Fcitx 输入法框架是一个常见的选择&#xff0c;特别是对于需要中文输入的用户。以下是详细的步骤来安装和配置 Fcitx 输入法&#xff1a; 1. 安装 Fcitx 和相关输入法 首先&#xff0c;更新你的包列表并安装…

伊犁云计算创建ftp

1 yum 安装不再说&#xff0c; 2 有局域网搭建不再说 参考之前的文档 我们直接干ftp 先装ftp 服务 进入 etc/vsftpd/vsftpd.conf 修改如上图 看一下ftp 21 端口是不是在监听 开始测试

2016年国赛高教杯数学建模A题系泊系统的设计解题全过程文档及程序

2016年国赛高教杯数学建模 A题 系泊系统的设计 近浅海观测网的传输节点由浮标系统、系泊系统和水声通讯系统组成&#xff08;如图1所示&#xff09;。某型传输节点的浮标系统可简化为底面直径2m、高2m的圆柱体&#xff0c;浮标的质量为1000kg。系泊系统由钢管、钢桶、重物球、…