• vue中el-table的行拖拽和el-dialog中表格的行拖拽


    实现效果:

    (1)el-table的行拖拽(可整行拖拽)

    (2)页面中有el-table,el-table中点击出现弹框,弹框中有el-table,实现弹框中的表格拖拽

     实现方法:

    以上两种方式的共同步骤

    1、安装sortablejs

    cnpm install sortablejs --save
    

    2.在对应的vue页面种引入Sortable

    import Sortable from ‘sortablejs’
    

    3.使用el-table需有唯一的key值,如id

    1. <el-table row-key="id" :data="tableData" style="width: 100%">
    2. <el-table-column prop="date" label="日期" width="180"></el-table-column>
    3. <el-table-column prop="name" label="姓名" width="180"></el-table-column>
    4. <el-table-column prop="address" label="地址"></el-table-column>
    5. </el-table>

    4.vue 页面中的tableData数据

    1. data() {
    2. return {
    3. tableData: [{
    4. id:7458963256145,
    5. date: '2016-05-02',
    6. name: '王小虎',
    7. address: '上海市普陀区金沙江路 1518 弄'
    8. }, {
    9. id:1256358945623,
    10. date: '2016-05-04',
    11. name: '王小虎',
    12. address: '上海市普陀区金沙江路 1517 弄'
    13. }, {
    14. id:7485968563232,
    15. date: '2016-05-01',
    16. name: '王小虎',
    17. address: '上海市普陀区金沙江路 1519 弄'
    18. }, {
    19. id:4230568745963,
    20. date: '2016-05-03',
    21. name: '王小虎',
    22. address: '上海市普陀区金沙江路 1516 弄'
    23. }]
    24. }
    25. }

    5.vue页面中使用mounted挂载行拖拽的方法,使其页面加载即可调用

    1. mounted () {
    2. // 行拖拽排序
    3. this.rowDrop()
    4. }

    6.行拖拽方法

    1. methods: {
    2. // 行拖拽
    3. rowDrop () {
    4. let tbody = document.querySelector('.el-table__body-wrapper tbody')
    5. let _this = this
    6. Sortable.create(tbody, {
    7. // or { name: "...", pull: [true, false, 'clone', array], put: [true, false, array] }
    8. group: {
    9. name: 'words',
    10. pull: true,
    11. put: true
    12. },
    13. animation: 150, // ms, number 单位:ms,定义排序动画的时间
    14. onAdd: function (evt) { // 拖拽时候添加有新的节点的时候发生该事件
    15. console.log('onAdd.foo:', [evt.item, evt.from])
    16. },
    17. onUpdate: function (evt) { // 拖拽更新节点位置发生该事件
    18. console.log('onUpdate.foo:', [evt.item, evt.from])
    19. },
    20. onRemove: function (evt) { // 删除拖拽节点的时候促发该事件
    21. console.log('onRemove.foo:', [evt.item, evt.from])
    22. },
    23. onStart: function (evt) { // 开始拖拽出发该函数
    24. console.log('onStart.foo:', [evt.item, evt.from])
    25. },
    26. onSort: function (evt) { // 发生排序发生该事件
    27. console.log('onUpdate.foo:', [evt.item, evt.from])
    28. },
    29. onEnd ({ newIndex, oldIndex }) { // 结束拖拽
    30. let currRow = _this.tableData.splice(oldIndex, 1)[0]
    31. _this.tableData.splice(newIndex, 0, currRow)
    32. }
    33. })
    34. }
    35. }

    以上行拖拽的方法适用于实现效果的第一种情况,即根据querySelector('.el-table__body-wrapper tbody')可找到页面中的el-table实现拖拽。

    实现el-dialog中的el-table拖拽方式为:

    template中的弹框样式:

    1. <div class="data-box">
    2. <el-dialog title="xxxxx" :visible.sync="showDialog" width="42%">
    3. <el-table class="drow_table">el-table>
    4. el-dialog>
    5. div>

    在点击出现弹框的方法处初始化行拖拽的方法:

    nextTick的使用十分关键,避免因表格没有加载完成出现查询不到el-table从而无法使用行拖拽的情况。

    1. showData() {
    2. this.$nextTick(() => {
    3. this.rowDrop()
    4. })
    5. },

    且在行拖拽的方法进行querySelector的查找时,需对查询到dialog的el-table的类中,即:

    1. rowDrop() {
    2. let tbody = document.querySelector('.drow_table .el-table__body-wrapper tbody')
    3. // 以下与上面行拖拽的方法相同
    4. }

    这样就实现了el-table的行拖拽功能。

    本博客参考了Vue Element 表格实现拖拽排序_阳光的男夹克的博客-CSDN博客_element table 拖拽排序

  • 相关阅读:
    C++ opencv图像存储和MAT容器
    LeetCo
    Python入门自学进阶-Web框架——16、Django登录/注册
    从语法到AI率:用ChatGPT润色论文的3个误区
    项目:UDP聊天室
    【云原生之k8s】KubeSphere介绍及安装
    计算机毕业设计Java派大星水产商城(源代码+数据库+系统+lw文档)
    微信支付v3接口的 官方 Java SDK
    使用 request 和 cheerio 库来发送 HTTP 请求
    【AGC】增长服务2-应用内消息示例
  • 原文地址:https://blog.csdn.net/weixin_43312391/article/details/126058478