利用sortablejs对elementui中的table进行拖拽排序

2023-10-28 19:40

本文主要是介绍利用sortablejs对elementui中的table进行拖拽排序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 Sortable.js是一款优秀的js拖拽库,支持ie9及以上版本ie浏览器和现代浏览器,也可以运行在移动触摸设备中。不依赖jQuery。支持 Meteor、AngularJS、React、Vue、Knockout框架和任何CSS库,如Bootstrap、Element UI。你可以用来拖拽div、table等元素,特点:体积小、功能强大。

官方Demo:SortableJS

Sortable.js可以实现同组内上下拖动元素,也可以实现不同组内互相拖动元素。这里主要说的是组内上下拖动的情况

一.安装

npm i sortablejs -S

二.引用

引用:在需要用到Sortable的 *.vue 中的script部分引用。也可以在main.js中入注册到Vue的根实例中

import Sortable from 'sortablejs'

三.使用

methods: {//拖拽排序处理rowDrop() {const el = this.$refs.equipTable.$el.querySelectorAll('.el-table__body-wrapper > table > tbody')[0]let _this = thisthis.sortable = Sortable.create(el, {ghostClass: 'sortable-ghost',setData: function(dataTransfer) {dataTransfer.setData('Text', '')},onEnd({ newIndex, oldIndex }) {console.log('TabsTreeTable -> onEnd -> newIndex, oldIndex', newIndex, oldIndex);let tableData = _.cloneDeep(_this.tableData);//交换处理const newOrderId = tableData[newIndex].order_idconst oldOrderId = tableData[oldIndex].order_idtableData[newIndex].order_id = oldOrderIdtableData[oldIndex].order_id = newOrderIdconst currRow = tableData.splice(oldIndex, 1)[0];tableData.splice(newIndex, 0, currRow);//促使表格动态渲染Object.assign(_this.tableData,_.cloneDeep(tableData));console.log(_this.tableData)}});}

移动的过程中,表格前面的序号也会跟着一起移动,处理方法,使用fixed固定序号那一列即可

              <el-table-column label="序号"type="index"fixedwidth="50"></el-table-column>

注意:el-table中必须设置 row-key="id",否则会导致排序不成功。原因:由于vue加载循环机制,在进行删除时,一定要添加key,跟使用v-for循环一样都需要添加绑定key。

 四.参考文章

sortablejs — 强大的拖拽库

五.遇到的问题

1.解决排序之后刷新数据,显示和实际数据不一致的问题

本来想的是在排序之后通过请求表格的数据以达到更新表格的问题,但是实践发现:这样操作之后数据是发生了改变,但是页面的展示的数据和实际的数据的顺序不一样,后来无意间在请求数据之前把数据置空

发现问题解决了,至于原因,目前还不知道,有知道的可以在评论区讨论一下

2.动态修改一些配置,比如disabled

options 是 sortable 配置项,具体配置详情查看Sortable 配置文档

 注意不要漏了options,楼主开始就是漏了,导致设置无效

这篇关于利用sortablejs对elementui中的table进行拖拽排序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/295507

相关文章

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

hdu 1285(拓扑排序)

题意: 给各个队间的胜负关系,让排名次,名词相同按从小到大排。 解析: 拓扑排序是应用于有向无回路图(Direct Acyclic Graph,简称DAG)上的一种排序方式,对一个有向无回路图进行拓扑排序后,所有的顶点形成一个序列,对所有边(u,v),满足u 在v 的前面。该序列说明了顶点表示的事件或状态发生的整体顺序。比较经典的是在工程活动上,某些工程完成后,另一些工程才能继续,此时

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

【软考】希尔排序算法分析

目录 1. c代码2. 运行截图3. 运行解析 1. c代码 #include <stdio.h>#include <stdlib.h> void shellSort(int data[], int n){// 划分的数组,例如8个数则为[4, 2, 1]int *delta;int k;// i控制delta的轮次int i;// 临时变量,换值int temp;in

遮罩,在指定元素上进行遮罩

废话不多说,直接上代码: ps:依赖 jquer.js 1.首先,定义一个 Overlay.js  代码如下: /*遮罩 Overlay js 对象*/function Overlay(options){//{targetId:'',viewHtml:'',viewWidth:'',viewHeight:''}try{this.state=false;//遮罩状态 true 激活,f

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图