Vue 表单拖拽排序
Vue table表单拖拽
业务需求:
因为数据展示使用的是 elementUI 的 Table进行数据展示的,现在的需求是通过拖拽表单进行表单排序。同时,动态修改表单中的数据排列顺序。查阅了好多资料,也翻看了好多github上别人封装好的表单插件,但是最终都不是自己想要的,其中主要原因就是,后台管理系统页面中,同一个窗口可能涉及到多个表单拖拽排序,与此同时,使用部分插件就有可能导致数据更新不及时,或者下次在使用的时候,数据无论如何赋值就是更新不成功,导致最终渲染的要拖拽的表单一会有数据,一会无数据的,体验很不好。
解决方案:
选取了好多封装好的插件,都没有达到自己想要的效果。偶然间看到有人提示使用原生拖拽的方式来解决表单托拖拽排序的问题。最终,我采用 sortablejs 结合原生DOM节点操作的方式,对表单元素数据进行剪切、拼接处理等方式,最终达到理想效果。
操作步骤:
- 首先安装 sortablejs 插件
yarn add sortablejs
- 引用 sortablejs 插件(全局使用,或组件内使用)
import Sortable from "sortablejs";
- Table 相关代码
<template>
<div class="drag_table">
<!-- row-key 排序依据的参数,此处不能使用 index 作为排序的依据 -->
<!-- highlight-current-row:单击选中行高亮 -->
<el-table :data="dragList" ref="dragTable" row-key="id" border stripe highlight-current-row>
<el-table-column label="序号" type="index" width="50" align="center"></el-table-column>
<el-table-column label="ID" prop="id" align="center"></el-table-column>
<el-table-column label="姓名" prop="name" show-overflow-tooltip></el-table-column>
<!-- 性别判断,使用 prop 属性 -->
<el-table-column label="性别" prop="sex">
<template slot-scope="scope">
<el-tag>{{ scope.row.sex === 0 ? '女' : '男' }}</el-tag>
</template>
</el-table-column>
<!-- 从排序表单中移除表单元素 -->
<el-table-column label="操作" width="66" align="center">
<template slot-scope="scope">
<el-button type="danger" icon="el-icon-delete" plain @click="delItem(scope.$index)">移除</el-button>
</template>
</el-table-column>
</el-table>
</div>
</template>
- JavaScript逻辑代码
// 引入排序插件
import Sortable from "sortablejs";
export default {
name: "DragTable",
data() {
return {
sortable: null /* 表单拖拽 */ ,
dragList: [{
id: 1,
name: '张三',
sex: 1
}, {
id: 2,
name: '李四',
sex: 0
}, {
id: 3,
name: '王五',
sex: 0
}, {
id: 4,
name: '赵六',
sex: 1
}]
}
},
mounted() {
// 等待数据渲染完成再加初始化拖拽表单
this.$nextTick(() => {
this.initSortTable();
});
},
methods: {
// 移除数据
delItem(index) {
this.dragList.splice(index, 1)
},
// 初始化拖拽表单
initSortTable() {
// const elTag = this.$refs['dragTable'].$el.querySelectorAll(".el-table__body-wrapper > table > tbody")[0];
// 获取 el-table
const tableTag = this.$refs['dragTable'].$el;
// 获取 tbody 节点
const elTbody = tableTag.querySelectorAll(".el-table__body-wrapper > table > tbody")[0];
// 拖拽排序
this.sortable = Sortable.create(elTbody, {
onEnd: evt => {
const tempIndex = this.dragList.splice(evt.oldIndex, 1)[0];
this.dragList.splice(evt.newIndex, 0, tempIndex);
}
});
}
},
}
Vue 表单拖拽排序的更多相关文章
- vue el-transfer新增拖拽排序功能---sortablejs插件
<template> <!-- target-order="unshift"必须设置,如果不设置的话后台穿的value值得顺序会被data重置 - --> ...
- vue实现拖拽排序
基于vue实现列表拖拽排序的效果 在日常开发中,特别是管理端,经常会遇到要实现拖拽排序的效果:这里提供一种简单的实现方案. 此例子基于vuecli3 首先,我们先了解一下js原生拖动事件: 在拖动目标 ...
- vue列表拖拽排序功能实现
1.实现目标:目标是输入一个数组,生成一个列表:通过拖拽排序,拖拽结束后输出一个经过排序的数组. 2.实现思路: 2.1是使用HTML5的drag功能来实现,每次拖拽时直接操作Dom节点排序,拖拽结束 ...
- vue中基于sortablejs与el-upload实现文件上传后拖拽排序
今天做冒烟测试的时候发现商品发布有一个拖拽图片排序功能没做,赶紧加上 之前别的同事基于 vuedraggable 实现过这个功能,我这里自己深度封装了 el-upload ,用这种方式改动很大,而且感 ...
- RecyclerView拖拽排序和滑动删除实现
效果图 如何实现 那么是如何实现的呢?主要就要使用到ItemTouchHelper ,ItemTouchHelper 一个帮助开发人员处理拖拽和滑动删除的实现类,它能够让你非常容易实现侧滑删除.拖拽的 ...
- zTree的拖拽排序
ztree本身是可以支持拖拽的,但是却没有找到明确的支持拖拽的排序,也就是说,在拖拽过程中,需要自定义维护拖拽后的顺序并保存至后台. 在这样一个比较常规的需求情况下,网上也有朋友给出了一些解决方案,比 ...
- php接口实现拖拽排序功能
列表拖拽排序是一个很常见的功能,但是后端接口如何处理却是一个令人纠结的问题 如何实现才能达到效率最高呢 先分析一个场景,假如有一个页面有十条数据,所谓的拖拽就是在这十条数据来来回回的拖,但是每次拖动都 ...
- html5 Sortable.js 拖拽排序源码分析
最近公司项目经常用到一个拖拽 Sortable.js插件,所以有空的时候看了 Sortable.js 源码,总共1300多行这样,写的挺完美的. 本帖属于原创,转载请出名出处. 官网http:// ...
- 基于Vue实现可以拖拽的树形表格(原创)
因业务需求,需要一个树形表格,并且支持拖拽排序,任意未知插入,github搜了下,真不到合适的,大部分树形表格都没有拖拽功能,所以决定自己实现一个.这里分享一下实现过程,项目源代码请看github,插 ...
随机推荐
- Shell编程—正则表达式
1什么是正则表达式 1.1定义 正则表达式是你所定义的模式模板,Linux工具可以用它来过滤文本.Linux 工具(比如sed编辑器或gawk程序)能够在处理数据时使用正则表达式对数据进行模式匹配. ...
- JMH-大厂是如何使用JMH进行Java代码性能测试的?必须掌握!
Java 性能测试难题 现在的 JVM 已经越来越为智能,它可以在编译阶段.加载阶段.运行阶段对代码进行优化.比如你写了一段不怎么聪明的代码,到了 JVM 这里,它发现几处可以优化的地方,就顺手帮你优 ...
- Tensorflow2(二)tf.data输入模块
代码和其他资料在 github 一.tf.data模块 数据分割 import tensorflow as tf dataset = tf.data.Dataset.from_tensor_slice ...
- Java 将Html转为PDF
本文介绍如何在Java程序中将html文件转换成PDF文件.转换时,需要注意以下两点: 一.需要使用转换插件 可根据不同的系统来下载对应的插件,下载地址:windows-x86.zip, window ...
- POJ - 3037-Skiing(邻接表+Dijkstra)
Bessie and the rest of Farmer John's cows are taking a trip this winter to go skiing. One day Bessie ...
- tokitsukaze and RPG(暴力优化)
链接:https://ac.nowcoder.com/acm/contest/308/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- VMware安装Centos7 -九五小庞
VMware安装Centos7超详细过程(图文) https://blog.csdn.net/babyxue/article/details/80970526 安装centos7的时候 启动会提示Pl ...
- 13_Python的面向对象编程-类class,对象object,实例instance
1.面向对象概述 1.类是用来描述对象的工具,把拥有相同属性和行为的对象分为一组 2.对象是由类实例化出来的一个具体的对象 属性: 对象拥有的名词,用变量表示 ...
- [业界方案] 用SOFATracer学习分布式追踪系统Opentracing
[业界方案] 用SOFATracer学习分布式追踪系统Opentracing 目录 [业界方案] 用SOFATracer学习分布式追踪系统Opentracing 0x00 摘要 0x01 缘由 &am ...
- [Oracle/sql]查看当前用户名下有多少表 以及查看表字段信息
SQL> select table_name from user_tables order by table_name; TABLE_NAME ------------------------- ...