利用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

相关文章

JAVA SpringBoot集成Jasypt进行加密、解密的详细过程

《JAVASpringBoot集成Jasypt进行加密、解密的详细过程》文章详细介绍了如何在SpringBoot项目中集成Jasypt进行加密和解密,包括Jasypt简介、如何添加依赖、配置加密密钥... 目录Java (SpringBoot) 集成 Jasypt 进行加密、解密 - 详细教程一、Jasyp

linux实现对.jar文件的配置文件进行修改

《linux实现对.jar文件的配置文件进行修改》文章讲述了如何使用Linux系统修改.jar文件的配置文件,包括进入文件夹、编辑文件、保存并退出编辑器,以及重新启动项目... 目录linux对.jar文件的配置文件进行修改第一步第二步 第三步第四步总结linux对.jar文件的配置文件进行修改第一步进

Go语言中如何进行数据库查询操作

《Go语言中如何进行数据库查询操作》在Go语言中,与数据库交互通常通过使用数据库驱动来实现,Go语言支持多种数据库,如MySQL、PostgreSQL、SQLite等,每种数据库都有其对应的官方或第三... 查询函数QueryRow和Query详细对比特性QueryRowQuery返回值数量1个:*sql

Java Map排序如何按照值按照键排序

《JavaMap排序如何按照值按照键排序》该文章主要介绍Java中三种Map(HashMap、LinkedHashMap、TreeMap)的默认排序行为及实现按键排序和按值排序的方法,每种方法结合实... 目录一、先理清 3 种 Map 的默认排序行为二、按「键」排序的实现方式1. 方式 1:用 TreeM

Python进行word模板内容替换的实现示例

《Python进行word模板内容替换的实现示例》本文介绍了使用Python自动化处理Word模板文档的常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录技术背景与需求场景核心工具库介绍1.获取你的word模板内容2.正常文本内容的替换3.表格内容的

Git进行版本控制的实战指南

《Git进行版本控制的实战指南》Git是一种分布式版本控制系统,广泛应用于软件开发中,它可以记录和管理项目的历史修改,并支持多人协作开发,通过Git,开发者可以轻松地跟踪代码变更、合并分支、回退版本等... 目录一、Git核心概念解析二、环境搭建与配置1. 安装Git(Windows示例)2. 基础配置(必

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

MySQL进行分片合并的实现步骤

《MySQL进行分片合并的实现步骤》分片合并是指在分布式数据库系统中,将不同分片上的查询结果进行整合,以获得完整的查询结果,下面就来具体介绍一下,感兴趣的可以了解一下... 目录环境准备项目依赖数据源配置分片上下文分片查询和合并代码实现1. 查询单条记录2. 跨分片查询和合并测试结论分片合并(Shardin

C++归并排序代码实现示例代码

《C++归并排序代码实现示例代码》归并排序将待排序数组分成两个子数组,分别对这两个子数组进行排序,然后将排序好的子数组合并,得到排序后的数组,:本文主要介绍C++归并排序代码实现的相关资料,需要的... 目录1 算法核心思想2 代码实现3 算法时间复杂度1 算法核心思想归并排序是一种高效的排序方式,需要用