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权威指南 学习笔记之null和undefined
Sep 25 Javascript
字符串的replace方法应用浅析
Dec 06 Javascript
jQuery实现手机号码输入提示功能实例
Apr 30 Javascript
jQuery实现鼠标悬停显示提示信息窗口的方法
Apr 30 Javascript
使用HTML+CSS+JS制作简单的网页菜单界面
Jul 27 Javascript
AngularJS表单验证功能
Oct 19 Javascript
Vue-cropper 图片裁剪的基本原理及思路讲解
Apr 17 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
May 08 Javascript
Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
Sep 03 Javascript
简单谈谈offsetleft、offsetTop和offsetParent
Dec 04 Javascript
js实现弹幕墙效果
Dec 10 Javascript
vue组件是如何解析及渲染的?
Jan 13 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新手谈谈我的学习心得
2007/02/25 PHP
攻克CakePHP系列二 表单数据显示
2008/10/22 PHP
ThinkPHP CURD方法之data方法详解
2014/06/18 PHP
自制PHP框架之模型与数据库
2017/05/07 PHP
基于Jquery的开发个代阴影的对话框效果代码
2011/07/28 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
浅谈JS之iframe中的窗口
2016/09/13 Javascript
JavaScript中的toString()和toLocaleString()方法的区别
2017/02/15 Javascript
Vue脚手架的简单使用实例
2018/07/10 Javascript
NodeJs实现简单的爬虫功能案例分析
2018/12/05 NodeJs
spring+angular实现导出excel的实现代码
2019/02/27 Javascript
JavaScript实现的滚动公告特效【基于jQuery】
2019/07/10 jQuery
JS实现图片懒加载(lazyload)过程详解
2020/04/02 Javascript
JavaScript中跨域问题的深入理解
2021/03/04 Javascript
[31:33]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第一场
2014/05/23 DOTA
python的绘图工具matplotlib使用实例
2014/07/03 Python
Django中间件工作流程及写法实例代码
2018/02/06 Python
python 定时修改数据库的示例代码
2018/04/08 Python
python dict 相同key 合并value的实例
2019/01/21 Python
selenium 安装与chromedriver安装的方法步骤
2019/06/12 Python
Django的models模型的具体使用
2019/07/15 Python
解决django同步数据库的时候app models表没有成功创建的问题
2019/08/09 Python
详解Python中的分支和循环结构
2020/02/11 Python
Python学习之路安装pycharm的教程详解
2020/06/17 Python
python实现简单的tcp 文件下载
2020/09/16 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
2020/12/07 Python
Python实例教程之检索输出月份日历表
2020/12/16 Python
详解CSS3中的box-sizing(content-box与border-box)
2019/04/19 HTML / CSS
DNA测试:Orig3n
2019/03/01 全球购物
《口技》教学反思
2014/02/21 职场文书
旷工辞退通知书
2015/04/17 职场文书
房屋租赁意向书范本
2015/05/09 职场文书
2015年学校管理工作总结
2015/07/20 职场文书
PyTorch 如何自动计算梯度
2021/05/23 Python
基于Apache Hudi在Google云构建数据湖平台的思路详解
2022/04/07 Servers
MySQL控制流函数(-if ,elseif,else,case...when)
2022/07/07 MySQL