sortable+element 实现表格行拖拽的方法示例


Posted in Javascript onJune 07, 2019

背景

1、vue项目中的表格需要实现行拖拽功能

2、表格使用element组件库中el-table

方案介绍

Sortable.js

介绍:Sortable.js是一款轻量级的拖放排序列表的js插件

引用自官方文档:No jQuery required. Supports Meteor, AngularJS, React, Polymer, Vue, Knockout and any CSS library, e.g. Bootstrap.

参考地址: https://github.com/SortableJS/Sortable

vuedraggable
介绍:基于Sortable.js的vue组件,用以实现拖拽功能

引用自官方文档:Vue drag-and-drop component based on Sortable.js

参考地址: https://github.com/SortableJS/Vue.Draggable

遇到的问题
在使用vuedraggable的过程中,发现必须用<draggable></draggable>包裹拖动项的父级元素,但是element组件库对table进行封装,无法直接包裹拖动项(即tr)的父级元素

如果你的项目中,表格未使用组件库,实现可以参考 https://3water.com/article/162648.htm

解决方案

使用 sortable.js

步骤一: 安装

npm install vuedraggable

步骤二:引入

import Sortable from 'sortablejs';

@Component({
 components: {
  Sortable
 }
})

步骤三: el-table 添加row-key属性

<el-table
 ref="filterTable"
 row-key="ip" 
 @filter-change="handlerFilterChange" 
 class="cl-table" 
 :data="resourceList" 
 v-loading="resourceListLoading" 
 stripe style="width:100%;">
 <el-table-column
   prop="name"
  label="主机名" 
  :min-width="150" 
  show-overflow-tooltip>
 </el-table-column>
 </el-table>

步骤四 : 将拖拽元素设置为要拖动项的父级元素

mounted() {
   // 表格中需要实现行拖动,所以选中tr的父级元素
  const table = document.querySelector('.el-table__body-wrapper tbody')
  const self = this
  Sortable.create(table, {
   onEnd({ newIndex, oldIndex }) {
    console.log(newIndex, oldIndex)
    const targetRow = self.resourceList.splice(oldIndex, 1)[0]
    self.resourceList.splice(newIndex, 0, targetRow)
   }
  })
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js checkbox(复选框) 使用集锦
Apr 28 Javascript
JQuery获取当前屏幕的高度宽度的实现代码
Jul 12 Javascript
基于jQuery插件实现点击小图显示大图效果
May 11 Javascript
js链表操作(实例讲解)
Aug 29 Javascript
详解node服务器中打开html文件的两种方法
Sep 18 Javascript
Node.js学习教程之HTTP/2服务器推送【译】
Oct 31 Javascript
vue 中的keep-alive实例代码
Jul 20 Javascript
使用 Node.js 实现图片的动态裁切及算法实例代码详解
Sep 29 Javascript
在 Vue.js中优雅地使用全局事件的方法
Feb 01 Javascript
基于Vue.js与WordPress Rest API构建单页应用详解
Sep 16 Javascript
layui之数据表格--与后台交互获取数据的方法
Sep 29 Javascript
微信浏览器左上角返回按钮监听的实现
Mar 04 Javascript
利用Vue-draggable组件实现Vue项目中表格内容的拖拽排序
Jun 07 #Javascript
Vue中实现权限控制的方法示例
Jun 07 #Javascript
vue 父组件中调用子组件函数的方法
Jun 06 #Javascript
通过seajs实现JavaScript的模块开发及按模块加载
Jun 06 #Javascript
小试小程序云开发(小结)
Jun 06 #Javascript
怎么使用javascript深度拷贝一个数组
Jun 06 #Javascript
微信小程序如何使用globalData的方法
Jun 06 #Javascript
You might like
paypal即时到账php实现代码
2010/11/28 PHP
浅析PHP 按位与或 (^ 、&amp;)
2013/06/21 PHP
php针对cookie操作的队列操作类实例
2014/12/10 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
2016/06/13 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
PHP树形结构tree类用法示例
2019/02/01 PHP
学习ExtJS fit布局使用说明
2009/10/08 Javascript
基于jquery+thickbox仿校内登录注册框
2010/06/07 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
2011/09/21 Javascript
js分解url参数(面向对象-极简主义法应用)
2012/08/09 Javascript
最流行的Node.js精简型和全栈型开发框架介绍
2015/02/26 Javascript
jQuery使用fadein方法实现渐出效果实例
2015/03/27 Javascript
jQuery采用连缀写法实现的折叠菜单效果
2015/09/18 Javascript
jquery+ajax+text文本框实现智能提示完整实例
2016/07/09 Javascript
JavaScript如何实现跨域请求
2016/08/05 Javascript
基于zepto.js实现登录界面
2017/10/09 Javascript
使用koa-log4管理nodeJs日志笔记的使用方法
2018/11/30 NodeJs
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
2019/08/01 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
javascript设计模式之装饰者模式
2020/01/30 Javascript
vue npm install 安装某个指定的版本操作
2020/08/11 Javascript
python中元类用法实例
2014/10/10 Python
Python-OpenCV基本操作方法详解
2018/04/02 Python
python使用tensorflow深度学习识别验证码
2018/04/03 Python
将TensorFlow的模型网络导出为单个文件的方法
2018/04/23 Python
Python面向对象程序设计多继承和多态用法示例
2019/04/08 Python
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
英国家喻户晓的高街品牌:River Island
2017/11/28 全球购物
联想台湾官网:Lenovo TW
2018/05/09 全球购物
汉米尔顿手表官网:Hamilton
2020/09/13 全球购物
高级电工工作职责
2013/11/21 职场文书
人力资源职位说明书
2014/07/29 职场文书
配置nginx 重定向到系统维护页面
2021/06/08 Servers
使用Spring处理x-www-form-urlencoded方式
2021/11/02 Java/Android
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android
Java线程的6种状态与生命周期
2022/05/11 Java/Android