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

相关文章

SpringBoot结合Knife4j进行API分组授权管理配置详解

《SpringBoot结合Knife4j进行API分组授权管理配置详解》在现代的微服务架构中,API文档和授权管理是不可或缺的一部分,本文将介绍如何在SpringBoot应用中集成Knife4j,并进... 目录环境准备配置 Swagger配置 Swagger OpenAPI自定义 Swagger UI 底

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

MySQL CTE (Common Table Expressions)示例全解析

《MySQLCTE(CommonTableExpressions)示例全解析》MySQL8.0引入CTE,支持递归查询,可创建临时命名结果集,提升复杂查询的可读性与维护性,适用于层次结构数据处... 目录基本语法CTE 主要特点非递归 CTE简单 CTE 示例多 CTE 示例递归 CTE基本递归 CTE 结

一文解密Python进行监控进程的黑科技

《一文解密Python进行监控进程的黑科技》在计算机系统管理和应用性能优化中,监控进程的CPU、内存和IO使用率是非常重要的任务,下面我们就来讲讲如何Python写一个简单使用的监控进程的工具吧... 目录准备工作监控CPU使用率监控内存使用率监控IO使用率小工具代码整合在计算机系统管理和应用性能优化中,监

MySQL 8 中的一个强大功能 JSON_TABLE示例详解

《MySQL8中的一个强大功能JSON_TABLE示例详解》JSON_TABLE是MySQL8中引入的一个强大功能,它允许用户将JSON数据转换为关系表格式,从而可以更方便地在SQL查询中处理J... 目录基本语法示例示例查询解释应用场景不适用场景1. ‌jsON 数据结构过于复杂或动态变化‌2. ‌性能要

如何使用Lombok进行spring 注入

《如何使用Lombok进行spring注入》本文介绍如何用Lombok简化Spring注入,推荐优先使用setter注入,通过注解自动生成getter/setter及构造器,减少冗余代码,提升开发效... Lombok为了开发环境简化代码,好处不用多说。spring 注入方式为2种,构造器注入和setter

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原