Sortablejs实现vue项目表格拖动排序

1.简介:

Sortable.js是一款优秀的js拖拽库,支持ie9及以上版本ie浏览器和现代浏览器,也可以运行在移动触摸设备中。不依赖jQuery。支持 Meteor、AngularJS、React、Vue、Knockout框架和任何CSS库,如Bootstrap、Element UI。你可以用来拖拽div、table等元素。

2.官网:

(1)中文文档教程:sortable.js中文文档 - itxst.comhttps://www.itxst.com/sortablejs/neuinffi.html

(2)直观了解及效果使用:Sortable.js中文网http://www.sortablejs.com/

(3)详细文档教程:sortablejs - npmhttps://www.npmjs.com/package/sortablejs

3.使用:

(注:row-key==>值数据中id,id:标记表格行)

<template>
   <div class="main-content">
        <el-table
          ref="multipleTable"
          :data="tables"
          border
          fit
          highlight-current-row
          row-key="id"       
          id="tableRowDrop"
        >
          <el-table-column>11</el-table-column>
          <el-table-column>22</el-table-column>
          <el-table-column>33</el-table-column>
       </el-table>
  </div>
</template>

<script>

import Sortable from 'sortablejs'   //下载插件命令:npm install sortablejs --save
​
export default {
data(){
  return{
    tables:[],     //保存表格显示数据
    rowSortOld:[], //保存表格行拖动前:id顺序数组(旧)
    rowSortNew:[]  //保存表格行拖动后:id顺序数组(新)
  }
},
    
mounted() {
  //阻止默认行为
  document.body.ondrop = function (event) {
     event.preventDefault();
     event.stopPropagation();
  };
  //列表行拖拽后顺序数组
  this.rowDrop();
},
    
methods: {
  //表格行拖拽
  rowDrop() {
    //获取表格对象
    const tbody = document.querySelector('#tableRowDrop tbody');
    const _this = this;  //(注意此处引用)
    Sortable.create(tbody, {
        onEnd({ newIndex, oldIndex }) {
           const currRow = _this.tables.splice(oldIndex, 1)[0];
           _this.tables.splice(newIndex, 0, currRow);
        }
        
        //保存列表拖拽后顺序
        _this.rowSortNew = []; //每次列表拖拽前,清空上次数据
        for(let i in _this.tables){//多个对象需遍历赋值
            _this.rowSortNew.push(_this.tables[i]['id']);
        }
        //列表拖拽后顺序
        _this.updateTableSort(_this.rowSortNew);
    })
  },
      
  //列表拖拽后顺序
  updateTableSort(rowSortNew){
    //控制台输出对比前后顺序  
    console.log('列表拖拽前顺序id数组:'+this.rowSortOld);
    console.log('列表拖拽后顺序id数组:'+rowSortNew);
    const formData = new FormData();
    //此处封装便于传递给后台
    formData.append('rowSortOld',JSON.stringify(this.rowSortOld));
    formData.append('rowSortNew',JSON.stringify(rowSortNew));
  },
  
  //获取表格渲染数据
  getList() {
    apiGet(this, this.url).then((res) => {
       this.tables = res.data;
       //保存列表拖拽前顺序id(注:此ID为列信息中的ID,多个对象需遍历赋值)
       for(let i in res.data){
           this.rowSortOld.push(res.data[i].id);
       }
    });
  }
}

</script>

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值