zoukankan      html  css  js  c++  java
  • element-UI ,Table组件实现拖拽效果

    拖拽效果,先放效果图,步骤放在后面~~

    一、引入三方插件

    1.引入sortable.js的包: npm install sortable.js --save

    2.或者npm i -S vuedraggable

      vuedraggable依赖 Sortable.js,所以下载了vuedraggable,我们便可以直接引入Sortable使用Sortable的特性。

      vuedraggable是Sortable一种加强,实现组件化的思想,可以结合Vue,使用起来更方便

    二、Sortable使用

    在这里我们还是使用一句Sortable的构建方式

    import Sortable from 'sortablejs';

    三、实例

    需要注意的是element table务必指定row-key,row-key必须是唯一的,如ID,不然会出现排序不对的情况。

    <template>
      <div style="800px">
    
        <el-table :data="tableData"
          border
          row-key="id"
          align="left">
         <el-table-column v-for="(item, index) in col"
            :key="`col_${index}`"
            :prop="dropCol[index].prop"
            :label="item.label"> 
          </el-table-column>
        </el-table>
        <pre style="text-align: left">
          {{dropCol}}
        </pre>
        <hr>
        <pre style="text-align: left">
          {{tableData}}
        </pre>
      </div>
    </template>
    <script>
    import Sortable from 'sortablejs'
    export default {
      data() {
        return {
          col: [
            {
              label: '日期',
              prop: 'date'
            },
            {
              label: '姓名',
              prop: 'name'
            },
            {
              label: '地址',
              prop: 'address'
            }
          ],
          dropCol: [
            {
              label: '日期',
              prop: 'date'
            },
            {
              label: '姓名',
              prop: 'name'
            },
            {
              label: '地址',
              prop: 'address'
            }
          ],
          tableData: [
            {
              id: '1',
              date: '2016-05-02',
              name: '王小虎1',
              address: '上海市普陀区金沙江路 100 弄'
            },
            {
              id: '2',
              date: '2016-05-04',
              name: '王小虎2',
              address: '上海市普陀区金沙江路 200 弄'
            },
            {
              id: '3',
              date: '2016-05-01',
              name: '王小虎3',
              address: '上海市普陀区金沙江路 300 弄'
            },
            {
              id: '4',
              date: '2016-05-03',
              name: '王小虎4',
              address: '上海市普陀区金沙江路 400 弄'
            }
          ]
        }
      },
      mounted() {
        this.rowDrop()
        this.columnDrop()
      },
      methods: {
        //行拖拽
        rowDrop() {
          const tbody = document.querySelector('.el-table__body-wrapper tbody')
          const _this = this
          Sortable.create(tbody, {
            onEnd({ newIndex, oldIndex }) {
              const currRow = _this.tableData.splice(oldIndex, 1)[0]
              _this.tableData.splice(newIndex, 0, currRow)
            }
          })
        },
        //列拖拽
        columnDrop() {
          const wrapperTr = document.querySelector('.el-table__header-wrapper tr')
          this.sortable = Sortable.create(wrapperTr, {
            animation: 180,
            delay: 0,
            onEnd: evt => {
              const oldItem = this.dropCol[evt.oldIndex]
              this.dropCol.splice(evt.oldIndex, 1)
              this.dropCol.splice(evt.newIndex, 0, oldItem)
            }
          })
        }
      }
    }
    </script>

    四、补充说明

      可以直接绑定从服务器查询到的结果,也可以动态绑定vueX里的数据,如要保存排序结果的话,则需要后台根据保存时的数据顺序进行保存

    嗯。就酱~~

    参考https://www.jianshu.com/p/6da3043aed2a

    参考https://www.2cto.com/kf/201811/785039.html

  • 相关阅读:
    美的觉醒
    jquery中ajax使用error调试错误的方法
    VC项目开发之单文档多视图实现-非分割窗口[转]
    MFC常见问题解惑[转]
    计算机视觉、机器学习相关领域论文和源代码大集合[转]
    C++成员变量、构造函数的初始化顺序 [转]
    VC中常用的宏[转]
    (VC)解决绘图时闪烁问题的一点经验[转]
    C++的辅助工具介绍 [转]
    [GUI]界面开发类库-Ribbon风格 [转]
  • 原文地址:https://www.cnblogs.com/jin-zhe/p/10181852.html
Copyright © 2011-2022 走看看