vue3使用vuedraggable实现(表格)拖拽排序

4 篇文章 0 订阅

1.安装插件

yarn add vuedraggable@next

npm i -S vuedraggable@next

2.举个栗子

<draggable 
  v-model="myArray" 
  group="people" 
  @start="drag=true" 
  @end="drag=false" 
  item-key="id">
  <template #item="{element}">
    <div>{{element.name}}</div>
   </template>
</draggable>

简单表格(带表头)
需要加 With header slot

<table align="left">      
    <Draggable
      :list="list"
      :animation="100"
      item-key="id"
      class="list-group"
      :forceFallback="true"
      ghost-class="ghost"
      @change="onMoveCallback"
      :move="getdata"
      draggable=".tr"
    >        
      <template #item="{ element }">
      <tr class="tr">
        <td>     
          {{ element.userId }}  
        </td>
        <td>
          {{ element.nickName }}
        </td>
        <td>     
          {{ element.sex }}  
        </td>        
      </tr>       
      </template>
      <!-- 表头 -->
      <template #header>
        <tr>
        <th>userId</th>
        <th>nickName</th>
        <th>sex</th>    
      </tr>
      </template>      
    </Draggable>
    </table>

当然,头可插入,尾部一样,如有需要也可添加

<draggable v-model="myArray" item-key="id">
  <template #item="{element}">
    <div> {{element.name}} </div>
  </template>
  <template #header>
    <button @click="addPeople">Add</button>
  </template>
  <template #footer>
    <button @click="addPeople">Add</button>
  </template>
</draggable>

3.简单表格拖拽功能:

<template>
  <div class="contain">
    <table align="left">      
    <Draggable
      :list="list"
      :animation="100"
      item-key="id"
      class="list-group"
      :forceFallback="true"
      ghost-class="ghost"
      @change="onMoveCallback"
      :move="getdata"
      draggable=".tr"
    >        
      <template #item="{ element }">
      <tr class="tr">
        <td>     
          {{ element.userId }}  
        </td>
        <td>
          {{ element.nickName }}
        </td>
        <td>     
          {{ element.sex }}  
        </td>
      </tr>       
      </template>
      <!-- 表头 -->
      <template #header>
        <tr>
        <th>userId</th>
        <th>nickName</th>
        <th>sex</th>
      </tr>
      </template>      
    </Draggable>
    </table>
  </div>
</template>

<script setup lang="ts">
import {ref,reactive} from 'vue'
import Draggable from 'vuedraggable'
import { GetUserList } from '/@/api/sys/user';
    let list = ref([]);
    const onMoveCallback = (val) => {
      console.log('拖动前的索引 :' + val.moved.newIndex);
      console.log('拖动后的索引 :' + val.moved.oldIndex);
    };
    const getdata = (val) => {
      console.log(val.draggedContext.element.id);
    };

    const getList = async () => {//获取列表接口};
	getList();
</script>

<style  scoped>
.contain{
  margin: 20px;
  padding: 20px;
  min-width: 1120px;
}
table{
  background: #fefefe;
}
td,th{
  padding: 16px;
  border: 1px solid #ccc;
}
</style>

其他:
vue3用法,官方文档及说明
vue2用法,官方文档及说明
vue.draggable中文文档

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值