Vue3 sortablejs 表格拖拽后,表格无法更新的问题处理

实用sortablejs在vue项目中实现表格行拖拽排序

你可能会发现,表格排序是可以实现,但是我们基于数据驱动的vue中关联的数据并没有发生变化, 如果你的表格带有列固定(固定列实际上在dom中有两个表格,其中固定的列在一个表格中,其他表格再另一个表格中),如果你再固定列加的拖拽,只变固定列,其他非固定列并不变,或者你在非固定列增加了拖拽,但是固定列却也不变化。

发生这个问题的主要原因是,sortablejs 实际上变化的是dom,也就是说在呈现层面上发生了变化。所以你需要在拖拽完成之后,去手动变化数据的排序。

你手动变化排序之后,你会发现也支持你的数据顺序变化了,但是页面上依然不更新。

我们先一个个来解释:

1 如果有固定列,实际上你变化的是固定列,二非固定列不变化。

如上图,这就是带有固定列。

这个是给固定列添加拖拽。

此时问题就来了,表现层:

你会发现,固定列拖拽,位置变了,但是非固定部分,却不会跟着变化。这就是不是同一个表格的原因。sortablejs 只变化了所在表格的dom结构,和非固定部分并不在同一个表格。这时你会相当去变数据。使其数据同步后看问题能否解决。

你会在onEnd 事件中,拿到新位置和老位置的索引,然后利用索引对数据进行切换。

为避免问题,我这里实在onStart中去拿当前数据,然后在onEnd中判断后去新旧数据进行替换的。

这时你会发现,数据已经变好了,但是页面依然是有如上图的效果,不会更新表格数据的结构。这时因为我们在这里做的表格数据替换,不会触发表格更新。所以这里你需要想办法让让表格重新渲染。

你可能会想到很多办法,我这里就很简单处理下。

你把表格渲染所依赖的数据先清空,然后再把刚才排完序的数据重新赋值给表格即可。

这样就完成了,退拽后,无论是拖拽固定列或者非固定列,基于vue的数据驱动实现重新渲染排完序的表格。

相关推荐
冰暮流星1 小时前
css之线性渐变
前端·css
徐同保1 小时前
tailwindcss暗色主题切换
开发语言·前端·javascript
mapbar_front1 小时前
大厂精英为何在中小公司水土不服?
前端
生莫甲鲁浪戴2 小时前
Android Studio新手开发第二十七天
前端·javascript·android studio
细节控菜鸡3 小时前
【2025最新】ArcGIS for JS 实现随着时间变化而变化的热力图
开发语言·javascript·arcgis
2501_916008894 小时前
Web 前端开发常用工具推荐与团队实践分享
android·前端·ios·小程序·uni-app·iphone·webview
SkylerHu4 小时前
前端代码规范:husky+ lint-staged+pre-commit
前端·代码规范
菜鸟una4 小时前
【微信小程序 + 消息订阅 + 授权】 微信小程序实现消息订阅流程介绍,代码示例(仅前端)
前端·vue.js·微信小程序·小程序·typescript·taro·1024程序员节
Yeats_Liao4 小时前
Go Web 编程快速入门 05 - 表单处理:urlencoded 与 multipart
前端·golang·iphone
飞翔的佩奇5 小时前
【完整源码+数据集+部署教程】【运动的&足球】足球场地区域图像分割系统源码&数据集全套:改进yolo11-RFAConv
前端·python·yolo·计算机视觉·数据集·yolo11·足球场地区域图像分割系统