sortablejs的使用-交换行数据及遇到的问题

一、使用

  1. 安装 sortablejs

    npm install sortablejs --save

  2. 在需要加排序的页面引入 sortablejs

    import Sortablejs form ‘sortablejs’

  3. mounted 函数中初始化一个 sortablejs 实例
    Sortablejs.create(容器, { 配置项 })

import Sortable from 'sortablejs'
mounted() {
    // 初始化函数
    this.initSortable()
}
methods: {
    initSortable() {
        const selector = '.el-table__body-wrapper > table > tbody'
        const el = document.querySelectorAll(selector)[0]
        Sortable.create(el, {
        onMove: evt => {
            const { dragged, related } = evt
        },
        onEnd: evt => {
            this.dragChangeLevel(evt.oldIndex, evt.newIndex)
        },
        filter: '.disabled-drag'
        })
    },
    dragChangeLevel(oldIndex, newIndex) {
        // 调用交换顺序的接口
    }
}

原本以为就这么简单结束了
但是遇到一个严重的问题
请添加图片描述

二、遇到的问题及解决方法

交换顺序后 会出现前端展示的数据顺序 和 后端返回的顺序不一致的情况
这是什么个原因
在页面用 {{}} 打印出的值也和后端返回的顺序一致,可就是偏偏渲染的时候不一样
先是查询了一下,说应该给 table 的行加上 key 值 加上了

<el-table :row-key="getRowKey"></el-table>

getRowKey(row) {
	return row.id
}

刚开始感觉交换了几次没问题,很开心的以为成功了,可是当我重复很多次之后,还是会出现这个问题
后面想了一个解决办法是在成功后 调用获取列表页的接口时 先清空 table 的数据 然后再给他赋值

// 获取列表页
async getDataLevel() {
    await getDataLevelList({ current: 1, size: 10 }).then((res) => {
        if (res.code === '000000') {
            this.dataList = []
            var list = res?.data?.records
            this.$nextTick(() => {
                this.dataList = list
            })
        }
    })
}

请添加图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值