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获取html页面节点方法(递归方式)
Dec 13 Javascript
jQuery的remove()方法使用详解
Aug 11 Javascript
Flow之一个新的Javascript静态类型检查器
Dec 21 Javascript
JS产生随机数的几个用法详解
Jun 22 Javascript
基于JavaScript实现树形下拉框
Aug 10 Javascript
JavaScript中undefined和null的区别
May 03 Javascript
bootstrap时间控件daterangepicker使用方法及各种小bug修复
Oct 25 Javascript
分析JS单线程异步io回调的特性
Dec 01 Javascript
js 取消页面可以选中文字的功能方法
Jan 02 Javascript
JS扩展String.prototype.format字符串拼接的功能
Mar 09 Javascript
Node.Js中实现端口重用原理详解
May 03 Javascript
three.js搭建室内场景教程
Dec 30 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
php判断变量类型常用方法
2012/04/24 PHP
隐性调用php程序的方法
2015/06/13 PHP
laravel框架学习笔记之组件化开发实现方法
2020/02/01 PHP
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
JQuery 选择器 xpath 语法应用
2010/05/13 Javascript
jQuery UI Datepicker length为空或不是对象错误的解决方法
2010/12/19 Javascript
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
2012/01/15 Javascript
JavaScript的Number对象的toString()方法
2015/12/18 Javascript
AngularJS入门教程之链接与图片模板详解
2016/08/19 Javascript
实现点击下箭头变上箭头来回切换的两种方法【推荐】
2016/12/14 Javascript
fullCalendar中文API官方文档
2017/02/07 Javascript
动态创建Angular组件实现popup弹窗功能
2017/09/15 Javascript
vue中组件通信的八种方式(值得收藏!)
2019/08/09 Javascript
[03:49]DOTA2英雄基础教程 光之守卫
2014/01/14 DOTA
[01:21:36]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python3.6 实现AES加密的示例(pyCryptodome)
2018/01/10 Python
python中字符串比较使用is、==和cmp()总结
2018/03/18 Python
python网络爬虫学习笔记(1)
2018/04/09 Python
对python中的高效迭代器函数详解
2018/10/18 Python
python os.path.isfile 的使用误区详解
2019/11/29 Python
Python CSV文件模块的使用案例分析
2019/12/21 Python
python正则表达式匹配IP代码实例
2019/12/28 Python
快速查找Python安装路径方法
2020/02/06 Python
Python 实现日志同时输出到屏幕和文件
2020/02/19 Python
Python APScheduler执行使用方法详解
2020/12/10 Python
Python实现FTP文件定时自动下载的步骤
2020/12/19 Python
CSS3用@font-face实现自定义英文字体
2013/09/23 HTML / CSS
美国受信赖的教育产品供应商:Nest Learning
2018/06/14 全球购物
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
建筑工程技术应届生求职信
2013/11/17 职场文书
男方父母婚礼答谢词
2014/01/25 职场文书
多媒体编辑专业毕业生求职信
2014/06/13 职场文书
交通工程专业推荐信
2014/09/06 职场文书
人生感悟经典句子
2019/08/20 职场文书
MySQL快速插入一亿测试数据
2021/06/23 MySQL
java开发双人五子棋游戏
2022/05/06 Java/Android