【JavaScript源代码】vue 使用 sortable 实现 el-table 拖拽排序功能.docx
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
vue 使用 sortable 实现 el-table 拖拽排序功能 本文给大家介绍vue 使用 sortable 实现 el-table 拖拽排序功能,具体内容如下所示: npm 下载: npm install sortablejs --save 引入: import Sortable from "sortablejs"; 代码: <template> <div class="table"> <el-table ref="dragTable" :data="tableData" border :row-class-name="tableRowClassName"> 在Vue.js应用中,实现`el-table`组件的拖拽排序功能可以借助第三方库`sortablejs`。`sortablejs`是一个轻量级的JavaScript库,它允许用户通过鼠标或触摸事件对HTML元素进行拖放排序。以下是使用`sortablejs`在Vue中实现`el-table`拖拽排序的详细步骤: 确保已经安装了`sortablejs`库。可以通过npm来安装: ```bash npm install sortablejs --save ``` 接下来,在Vue组件中引入`sortablejs`: ```javascript import Sortable from "sortablejs"; ``` 在模板部分,创建一个包含`el-table`的`div`元素,并为其绑定数据和一个自定义的`row-class-name`属性,以便我们可以为不可拖动的行设置特定的类: ```html <template> <div class="table"> <el-table ref="dragTable" :data="tableData" border :row-class-name="tableRowClassName"> <!-- 表格列定义 --> <el-table-column prop="date" label="日期"></el-table-column> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> <el-table-column label="操作"> <template slot-scope="scope"> <el-button class="move" type="text" size="small">拖拽</el-button> </template> </el-table-column> </el-table> </div> </template> ``` 在数据部分,定义表格的数据,包括一些具有`disabled`属性的项,这些项将被标记为不可拖动: ```javascript data() { return { tableData: [ { id: "1", name: "text_1", date: "1111-11-11", address: "测试_1" }, { id: "2", name: "text_2_不可拖拽", date: "2222-22-22", address: "测试_2_不可拖拽", disabled: true }, { id: "3", name: "text_3", date: "3333-33-33", address: "测试_3" }, { id: "4", name: "text_4", date: "4444-44-44", address: "测试_4" }, { id: "5", name: "text_5", date: "5555-55-55", address: "测试_5" }, ], }; }, ``` 在方法部分,我们需要创建一个`initSortable`函数来初始化`sortablejs`实例。这个函数会获取`el-table`的`tbody`元素,并创建一个拖拽实例。这里我们设置了动画效果、拖拽触发的目标、不可拖动的类名以及拖拽过程中的样式类名: ```javascript methods: { initSortable() { const ele = this.$refs.dragTable.$el.querySelector(".el-table__body > tbody"); let dragTable = Sortable.create(ele, { animation: 150, // 动画效果 handle: ".move", // 只有点击带有'move'类的按钮时才能触发拖拽 filter: ".disabled", // 不可拖动的行 dragClass: "dragClass", // 拖拽时元素的样式类 ghostClass: "ghostClass", // 拖拽时悬浮元素的样式类 chosenClass: "chosenClass", // 选中状态的样式类 // 监听拖拽事件 onStart: () => { console.log("开始拖动"); }, onEnd: (e) => { console.log(`结束拖动`, `拖动前索引${e.oldIndex}---拖动后索引${e.newIndex}`); // 在拖放结束后更新数据源 const item = this.tableData.splice(e.oldIndex, 1)[0]; this.tableData.splice(e.newIndex, 0, item); }, }); }, // 为表格行设置class tableRowClassName({ row }) { if (row.disabled) { return "disabled"; } return ""; }, }, ``` 在Vue组件的生命周期钩子中调用`initSortable`,确保在表格渲染完成后初始化拖拽功能: ```javascript mounted() { this.initSortable(); } ``` 通过以上步骤,我们成功地在Vue的`el-table`组件中实现了基于`sortablejs`的拖拽排序功能。拖动表行时,`onEnd`事件会捕获旧的索引和新的索引,并根据这些信息更新数据源,以保持视图与数据同步。同时,通过`disabled`属性和`row-class-name`,我们可以控制某些行不可拖动,提供更好的用户体验。




















- 粉丝: 1w+
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 【中泰证券】钢铁需求环比回落,原料价格跌幅明显-2025-03-24.pdf
- 【中泰证券】缅甸稀土矿进口维持低位,稀土价格易涨难跌-2025-03-24.pdf
- 【中泰证券】纳思达(002180):聚焦激光打印机自主可控之路-2025-02-14.pdf
- 【中泰证券】红利资产催化不断,配置需求逐步提升-2025-05-15.pdf
- 【中泰证券】玻纤板块盈利能力望继续修复,水泥产量略好于市场预期-2025-03-24.pdf
- 【中泰证券】海外住房市场研究之二:破解房地产周期中的复苏密码-2025-01-25.pdf
- 【中泰证券】晶赛科技(871981):石英晶振领先企业,AI算力驱动晶振元件升级-2025-04-11.pdf
- 【中泰证券】拥抱相对确定性,重视煤炭板块配置价值-2025-04-06.pdf
- 【中泰证券】房地产行业周报:政策加码提振市场,成交热度有所降温-2025-04-08.pdf
- 【中泰证券】旺季来临关注农药涨价机会,OPEC+意外增产周内油价走弱-2025-03-10.pdf
- 【中泰证券】布局底部修复机会,关注新质消费-2025-01-14.pdf
- 【中泰证券】广东宏大(002683):深度报告:乘西部崛起东风,民爆矿服龙头大展宏图-2025-03-26.pdf
- 【中泰证券】关税担忧带来基本金属价格大幅波动,等待风暴后的机会-2025-04-07.pdf
- 【中泰证券】化工关注涨价白马,新材料重视DS及机器人相关材料机会-2025-02-10.pdf
- 【中泰证券】化工涨价品种增加,新材料关注高成长OCA、固态电池材料-2025-02-16.pdf
- 【中泰证券】中泰电子AI系列之存储:近存计算3DDRAM,AI应用星辰大海-2025-02-20.pdf


