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 相关文章推荐
JavaScript 在线压缩和格式化收藏
Jan 16 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
Dec 31 Javascript
js实现点击图片将图片地址复制到粘贴板的方法
Feb 16 Javascript
JQuery简单实现锚点链接的平滑滚动
May 03 Javascript
avalonjs实现仿微博的图片拖动特效
May 06 Javascript
简单谈谈javascript中的变量、作用域和内存问题
Aug 30 Javascript
浅谈jquery设置和获得checkbox选中的问题
Aug 19 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
Sep 05 Javascript
深入理解选择框脚本[推荐]
Dec 13 Javascript
使用BootStrap实现标签切换原理解析
Mar 14 Javascript
JavaScript中BOM对象原理与用法分析
Jul 09 Javascript
Vue项目打包部署到apache服务器的方法步骤
Feb 01 Vue.js
利用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&amp;mysql(一)
2006/10/09 PHP
延长phpmyadmin登录时间的方法
2011/02/06 PHP
php 操作符与控制结构
2012/03/07 PHP
如何用PHP实现插入排序?
2013/04/10 PHP
php生成图形验证码几种方法小结
2013/08/15 PHP
PHP获取mysql数据表的字段名称和详细信息的方法
2014/09/27 PHP
php中二分法查找算法实例分析
2016/09/22 PHP
利用php生成验证码
2017/02/23 PHP
Laravel中的Auth模块详解
2017/08/17 PHP
PHP-FPM和Nginx的通信机制详解
2019/02/01 PHP
Gambit vs CL BO3 第二场 2.13
2021/03/10 DOTA
JavaScript中按位“异或”运算符使用介绍
2014/03/14 Javascript
一个检测表单数据的JavaScript实例
2014/10/31 Javascript
自己编写的支持Ajax验证的JS表单验证插件
2015/05/15 Javascript
js仿苹果iwatch外观的计时器代码分享
2015/08/26 Javascript
JS添加删除DIV的简单实例
2016/07/08 Javascript
jQuery实现select下拉框获取当前选中文本、值、索引
2017/05/08 jQuery
浅谈Angular路由守卫
2017/08/26 Javascript
vue.js使用v-model实现表单元素(input) 双向数据绑定功能示例
2019/03/08 Javascript
浅谈JavaScript闭包
2019/04/09 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
2020/12/14 Vue.js
[01:14]辉夜杯战队访谈宣传片—NEWBEE.Y
2015/12/26 DOTA
python网络编程学习笔记(四):域名系统
2014/06/09 Python
Python  pip安装lxml出错的问题解决办法
2017/02/10 Python
centos6.4下python3.6.1安装教程
2017/07/21 Python
详解supervisor使用教程
2017/11/21 Python
教你使用python画一朵花送女朋友
2018/03/29 Python
Python之文字转图片方法
2018/05/10 Python
Python如何在bool函数中取值
2020/09/21 Python
台湾饭店和机票预订网站:Expedia台湾
2016/08/05 全球购物
阿迪达斯墨西哥官方网站:adidas墨西哥
2017/11/03 全球购物
贷款委托书范本
2014/04/08 职场文书
和谐社区口号
2014/06/19 职场文书
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
离职证明范本(5篇)
2014/09/19 职场文书
试用期辞职信范文
2015/03/02 职场文书