美文网首页
vue 中使用 sortable.js 拖动表格

vue 中使用 sortable.js 拖动表格

作者: McDu | 来源:发表于2019-09-30 09:56 被阅读0次

    sortable.js 官网
    拖放排序插件Sortable.js中文介绍

    1. 安装 npm 或 yarn 安装

    yarn add -D sortablejs 
    

    2. 使用

    <script src="//unpkg.com/vue/dist/vue.js"></script>
    <script src="//unpkg.com/element-ui@2.3.9/lib/index.js"></script>
    <div id="app">
      <template>
        <el-table :data="tableData" style="width: 100%" :row-class-name="disabledDrag">
          <el-table-column prop="date" label="日期" width="180" />
          <el-table-column prop="name" label="姓名" width="180" />
          <el-table-column prop="address" label="地址" />
        </el-table>
      </template>
    </div>
    
    var Main = {
          data() {
            return {
              tableData: [{
                date: '2016-05-02',
                name: '王小虎',
                address: '上海市普陀区金沙江路 1518 弄'
              }, {
                date: '2016-05-04',
                name: '王小跳',
                address: '上海市普陀区金沙江路 1517 弄'
              }, {
                date: '2016-05-01',
                name: '王小虎',
                address: '上海市普陀区金沙江路 1519 弄'
              }, {
                date: '2016-05-03',
                name: '王小跳',
                address: '上海市普陀区金沙江路 1516 弄'
              }]
            }
          },
          methods: {
          // 给表格添加 disableDrag  类
           disabledDrag({row}) {
             if (row.name === '王小跳') {
               return 'disabled-drag';
             } else {
               return '';
             }
           }
        },
        mounted() {
          const selector = '.el-table__body-wrapper > table > tbody';
          const el = document.querySelectorAll(selector)[0];
          Sortable.create(el, {
            onMove: evt => {
              const {dragged, related} = evt;
              console.log(dragged, related); // 拿到拖动元素和交换位置的相关元素,可做一些操作,比如某些条件下禁止拖动排序
            },
            onEnd: evt => {
              // 拖动结束
            },
            filter: '.disabled-drag'
          });
         }
        }
    var Ctor = Vue.extend(Main)
    new Ctor().$mount('#app')
    
    @import url("//unpkg.com/element-ui@2.3.9/lib/theme-chalk/index.css");
    
    .el-table {
      .disabled-drag {
            color: #909399;
       }
    }
    

    效果:

    王小跳不能拖动
    jsfiddle 在线演示

    3. 小结

    事件:
    onChoose:function 列表单元被选中的回调函数
    onStart:function 列表单元拖动开始的回调函数
    onEnd:function 列表单元拖放结束后的回调函数
    onAdd:function 列表单元添加到本列表容器的回调函数
    onUpdate:function 列表单元在列表容器中的排序发生变化后的回调函数
    onRemove:function 列表元素移到另一个列表容器的回调函数
    onFilter:function 试图选中一个被filter过滤的列表单元的回调函数
    onMove:function 当移动列表单元在一个列表容器中或者多个列表容器中的回调函数
    onClone:function 当创建一个列表单元副本的时候的回调函数

    事件对象:
    to:HTMLElement--移动到列表容器
    from:HTMLElement--来源的列表容器
    item:HTMLElement--被移动的列表单元
    clone:HTMLElement--副本的列表单元
    oldIndex:number/undefined--在列表容器中的原序号
    newIndex:number/undefined--在列表容器中的新序号

    方法
    option(name[,value])
    获得或者设置项参数,使用方法类似于jQuery用法,没有第二个参数为获得option中第一个参数所对应的值,有第二个参数时,将重新赋给第一个参数所对应的值;
    toArray()
    序列化可排序的列表单元的data-id(可通过配置项中dataIdAttr修改)放入一个数组,并返回这个数组中
    sort()
    通过自定义列表单元的data-id的数组对列表单元进行排序
    save()
    destroy()

    相关文章

      网友评论

          本文标题:vue 中使用 sortable.js 拖动表格

          本文链接:https://www.haomeiwen.com/subject/hkunectx.html