elementUI的table使用Sortable进行拖拽并保存

本文介绍了如何在Vue项目中利用Sortable.js实现ElementUI表格的拖拽排序功能,包括Sortable的安装、使用方法及具体实例,以满足产品需求中的列表排序和置顶操作。同时,鼓励读者交流优化方案。
摘要由CSDN通过智能技术生成

前言

背景:近期有产品需求,需要表格可以拖拽来实现列表排序的功能,并且列表任一项可以置顶,置顶永远在最上面且置顶和非置顶不能交叉,记录以下


一、安装Sortable

sortable.js中文文档

npm install sortable.js --save
//或者
npm i -S vuedraggable

说明:vuedraggable依赖 Sortable.js,所以安装了vuedraggable,我们便可以直接引入Sortable使用Sortable的特性。vuedraggable是Sortable一种加强,实现组件化的思想,可以结合Vue,使用起来会更方便

二、使用Sortable

import Sortable from 'sortablejs'

准备工作到此结束,开始垒码

三、实例

<el-table
  size="mini"
   ref="multipleTable"
   :data="tableData"
   empty-text=" "
   row-key="id"
   :key="sortKey"
   fit
   @row-click="changeCommodity"
   @sort-change="handleSortChange"
   @selection-change="handleSelectionChange"
 >
    <el-table-column align="center" label="排序" width="80">
       <template slot-scope="{}">
         <el-popover
           style="opacity: 0.6"
           placement="top-start"
           width="200"
           trigger="hover"
           content="拖拽排序"
         >
           <el-button slot="reference" style="border: none"
             ><p class="iconfont qt-acp-drag" style="color:#333"></p
           ></el-button>
         </el-popover>
       </template>
     </el-table-column>
     <el-table-column label="商品信息" min-width="260">
       <template slot-scope="scope">
         <div class="goods-inner-item">
           <div class="goods-inner-item__left">
             <div class
Vue3中,使用Sortable库来实现表格(table)的拖拽排序功能非常方便。Sortable是一个强大的JavaScript库,用于创建可交互的拖放排序功能。以下是使用Sortable的主要步骤: 1. 安装Sortable库: 首先需要安装`@Sortablejs/sortablejs`库,可以使用npm或yarn命令行工具: ```bash npm install @sortablejs/sortablejs ``` 2. 引入并配置Sortable: 在你的组件文件中,引入Sortable并设置其选项: ```javascript import { Sortable } from '@sortablejs/react'; import SortableJS from 'sortablejs'; // ... export default { setup() { const items = [ // 这里是你表格数据的对象数组,每个对象都有一个用于排序的键 { id: 1, name: 'Item 1' }, { id: 2, name: 'Item 2' }, // ... ]; // 初始化Sortable实例,传入items和排序规则 const sortableItems = Sortable.create(items, { group: '__item__', // 设置排序组名,防止跨元素拖动 animation: 150, // 动画时间 onEnd: ({ newIndex }) => { // 排序完成后更新数据状态 this.items = items.slice().sort((a, b) => a.id - b.id); } }); return { sortableItems, items }; } } ``` 3. 更新HTML模板: 在模板中,绑定Sortable到表格行上: ```html <table> <tbody> <tr v-for="(item, index) in sortableItems.items" :key="item.id"> <td>{{ item.name }}</td> <!-- 或其他列 --> <td @mousedown.prevent> <draggable-item :item="item" index="index"></draggable-item> </td> </tr> </tbody> </table> ``` 4. `draggable-item`组件: 这个组件负责拖拽行为,并传递给Sortable处理: ```html <template> <div class="draggable" :data-id="item.id"> {{ item.name }} <button @dragstart.prevent>Drag</button> </div> </template> <script> export default { props: ['item', 'index'] }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值