vue3中使用Vue.Draggable的clone模式及遇到的坑

news2024/11/24 15:01:13

最近有个需求是从左边一个列表中,拖动列表元素到右边列表中,并且不是移动拖拽,而是复制拖拽,元素在右边列表中可以重复,比如左边是参加某个游戏的队员名单,右边是出场顺序,队员可以重复上场。类似这种效果:

// 截图
代码:

// 左边的列表
 <div class="left-list">
          <p class="title">队员选择</p>
          <draggable
            class="dragArea"
            :list="data.allPerson"
            :group="{ name: 'person', pull: 'clone', put: false }"
            item-key="id"
          >
            <template #item="{ element, index }">
              <div class="left-person" >
                <span class="item-name">{{ element.name }}</span>
              </div>
            </template>
          </draggable>
        </div>

//  右边的列表
<draggable
            class="dragArea "
            :list="data.allSelectedPerson"
            group="person"
            item-key="id"
          >
            <template #item="{ element, index }">
              <div class="right-item">
                <span>
                  {{ element.name }}
                </span>
                <span class="close-btn" @click="handleDeleteSelected(index)">
                  <icon-close /> </span
              ></div>
            </template>
          </draggable>

我用的是 Vue.Draggable 组件,不得不说这个组件真是太好用了,它的官方地址:vue.draggable github地址

官方演示地址: https://sortablejs.github.io/Vue.Draggable/#/clone 其中我用的就是 clone 模式。
在这里插入图片描述

Vue.Draggable 拿来即用,没啥难以上手的,就是我在使用的时候遇到一个问题,就是当右边有重复的数据时,多次上下快速拖动右边的元素排序,会偶发一个bug:右边列表会自动多出一个数据,并且操作不了(没法删除也没法给它排序)。
在这里插入图片描述
在这里插入图片描述

官方在 github 上的示例代码是:

<template>
  <div class="row">
    <div class="col-3">
      <h3>Draggable 1</h3>
      <draggable
        class="dragArea list-group"
        :list="list1"
        :group="{ name: 'people', pull: 'clone', put: false }"
        @change="log"
      >
        <div
          class="list-group-item"
          v-for="element in list1"
          :key="element.name"
        >
          {{ element.name }}
        </div>
      </draggable>
    </div>

    <div class="col-3">
      <h3>Draggable 2</h3>
      <draggable
        class="dragArea list-group"
        :list="list2"
        group="people"
        @change="log"
      >
        <div
          class="list-group-item"
          v-for="element in list2"
          :key="element.name"
        >
          {{ element.name }}
        </div>
      </draggable>
    </div>

    <rawDisplayer class="col-3" :value="list1" title="List 1" />

    <rawDisplayer class="col-3" :value="list2" title="List 2" />
  </div>
</template>

<script>
import draggable from "@/vuedraggable";
export default {
  name: "clone",
  display: "Clone",
  order: 2,
  components: {
    draggable
  },
  data() {
    return {
      list1: [
        { name: "John", id: 1 },
        { name: "Joao", id: 2 },
        { name: "Jean", id: 3 },
        { name: "Gerard", id: 4 }
      ],
      list2: [
        { name: "Juan", id: 5 },
        { name: "Edgard", id: 6 },
        { name: "Johnson", id: 7 }
      ]
    };
  },
  methods: {
    log: function(evt) {
      window.console.log(evt);
    }
  }
};
</script>
<style scoped></style>

经过一番曲折的找bug原因历程,后来发现是我自己用的不合适,就是在右边表格的 item-key 属性用的是id,本以为id是唯一的,后来出现上面提到那个bug的时候,控制台也报警告说有重的 itemKey 。然后我意识到由于我右边的元素是可以重复的,所以其实用id做 itemKey 也不是唯一的。

后来我用 index 做右边拖拽列表的 itemKey 了,也不知道这样合不合适,但确实是没有刚才那个bug了,因为 index 是不会重复的。

//  右边的列表
<draggable
            class="dragArea "
            :list="data.allSelectedPerson"
            group="person"
            item-key="index"
          >
            <template #item="{ element, index }">
              <div class="right-item">
                <span>
                  {{ element.name }}
                </span>
                <span class="close-btn" @click="handleDeleteSelected(index)">
                  <icon-close /> </span
              ></div>
            </template>
          </draggable>

在这里插入图片描述

希望本文对您有所帮助,,也希望大佬不吝赐教!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/766238.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络运维工作是什么的?

互联网运维工作&#xff0c;以服务为中心&#xff0c;以稳定、安全、高效为三个基本点&#xff0c;确保公司的互联网业务能够 724 小时为用户提供高质量的服务。 运维人员对公司互联网业务所依赖的基础设施、基础服务、线上业务进行稳定性加强&#xff0c;进行日常巡检发现服务…

【数学建模】数据预处理

在数学建模赛题中&#xff0c;官方给所有选手的数据可能受到主观或客观条件的影响有一定的问题&#xff0c;如果不进行数据的处理而直接使用的话可能对最终的结果造成一定的影响&#xff0c;因此为了保证数据的真实性和建模结果的可靠性&#xff0c;需要在建模之前对数据进行相…

VS工程项目中属性中无Qt设置问题解决方案

VS工程项目中属性中无Qt设置问题解决方案 若VS工程中&#xff0c;创建的是Qt工程&#xff0c;或者从Qt Creator工程转换为VS 工程时&#xff0c;VS项目属性中确无Qt Project Setttings等设置时&#xff0c;可通过如下方案解决 1. 右键项目&#xff0c;在下拉框中选择Qt项 2.…

微信号长时间不用会被腾讯回收

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 估计很多人不知道的一个冷知识&#xff1a;你的微信号并不归你本人所有&#xff0c;你只有账号的使用权&#xff0c;微信账号的所有权归腾讯公司所有。如果长期不使用&#xff0c;或者是违规&#…

MySQL—创建和管理表(六)

1.数据库相关操作 -- 1 创建数据库 -- 1.1 创建一个保存员工信息的数据库 CREATE DATABASE employees; -- 1.2 其他相关指令 -- 1.2.1 查看当前所有数据库 SHOW DATABASES; -- 1.2.2 “使用”一个数据库&#xff0c;使其作为当前数据库 USE employees;-- 2 命名规则 -- 见ppt …

虹科分享 | MACsec-先进的车载网络安全解决方案

Media Access Control Security&#xff08;简称 MACsec&#xff09;是以太网上最先进的安全解决方案。它为以太网上传输的几乎所有帧提供完整性保护、重放保护和可选的机密性保护。与其他解决方案相比&#xff0c;包括了单播、组播和广播消息以及在第2层上运行的所有协议。 M…

3D虚拟展厅和VR全景展厅该如何选择

导言&#xff1a; 在当今数字化时代&#xff0c;传统展厅已逐渐演变为3D虚拟展厅和VR全景展厅。这些技术的广泛应用为企业带来了全新的营销和展示方式。 一&#xff0e;3D虚拟展厅的特点和优势 3D虚拟展厅是一种基于3D技术的虚拟展示空间&#xff0c;通过计算机图像和模拟技术…

【C语言进阶(九)】常见内存错误以及柔性数组

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C语言学习分享⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多C语言知识   &#x1f51d;&#x1f51d; 常见内存错误 1. 前言2. 对NULL指针…

伦敦银价格一览表

一目均衡表&#xff08;Ichimoku Kinko Hyo&#xff09;是日本在二次大战前发明的行情分析方法&#xff0c;是全世界技术分析的鼻祖&#xff0c;其功能是提供市场的方向及入市位&#xff0c;被广泛应用于股市、债市和贵金属市场之中。日文KINKO的意思为时空平衡点&#xff0c;H…

Blueprint —— 入门笔记2

BP_Character Animation BlueprintBlend Space 1D 角色按键动画 命令slomo 0.1减慢时间&#xff0c;用于测试&#xff1b; 玩家输入&#xff1a;位移、旋转、缩放&#xff1b; 碰撞检测&#xff1a;执行动作等&#xff1b; 游戏开始 地图&#xff0c;开始游戏页面 打开地图 输入…

用于视觉跟踪的在线特征选择研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

如何在Appium中使用AI定位

当我们在写自动化测试脚本的时候&#xff0c;传统情况下一定要知道元素的属性&#xff0c;如id、name、class等。那么通过AI的方式定位元素可能就不需要知道元素的属性&#xff0c;评价人对元素的判断来定位&#xff0c;比如&#xff0c;看到一个搜索框&#xff0c;直接使用ai:…

Tomcat安装及配置教程(IDEA整合Tomcat)

目录 友情提醒第一章、Tomcat下载与安装1.1&#xff09;Tomcat介绍1.2&#xff09;官网下载 第二章、Tomcat配置环境变量2.1&#xff09;windows环境变量配置2.2&#xff09;验证Tomcat配置是否成功2.3&#xff09;报错解决 第三章、IDEA整合Tomcat3.1&#xff09;打开IDEA开发…

11.Ceph 对象存储系统 RGW 接口

文章目录 Ceph 对象存储系统 RGW 接口概念逻辑单位创建RGW接口开启httphttps创建RadosGW账户S3接口访问测试 Ceph 对象存储系统 RGW 接口 概念 对象存储&#xff08;object storage&#xff09;是非结构数据的存储方法&#xff0c;对象存储中每一条数据都作为单独的对象存储&…

资深测试总结,自动化测试-JSON+YAML+CSV+Excel数据驱动(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 数据驱动 在自动…

三分钟为你揭晓什么软件可以音频转文字

在一个繁忙的国际会议上&#xff0c;艾丽莎是一位积极参与的会议记录员。她负责记录并整理与会者的发言内容&#xff0c;以便后续审阅和分析。然而&#xff0c;由于会议中使用英语进行交流&#xff0c;艾丽莎常常面对着大量的英文音频文件&#xff0c;需要将这些音频转换为文字…

C# 连接mysql数据库报错:Character set ‘utf8mb3‘ is not supported by .Net Framework.

最近项目突然连接mysql数据库出现一个bug&#xff0c;排查了半小时&#xff0c;最后更新MySql.Data版本解决了&#xff0c;错误信息如下&#xff1a; System.NotSupportedException: Character set utf8mb3 is not supported by .Net Framework.在 MySql.Data.MySqlClient.Cha…

C#List转IList方法

最近工作中使用到了C#的List和IList。 这里参考百度上的资料&#xff0c;总结一下。 IList使用命名空间&#xff1a; using System.Collections; List<T>类:表示可通过索引访问的对象的强类型列表&#xff0c;提供用于对列表进行搜索、排序和操作的方法。 IList<T&…

思维导图软件哪个好?试用百款导图软件只留下这15个

​思维导图软件哪个好&#xff1f; 这是许多第一次使用思维导图软件的朋友无法回避的问题&#xff0c;看着眼前有数百款思维导图软件&#xff0c;数量多到让人患上选择困难症&#xff0c;不知道要选哪个导图软件好&#xff0c;这就好比在繁星点点的夜空中寻找属于自己的那颗星&…

vue3实现上传功能

效果&#xff1a; 点击即可上传 代码&#xff1a; <a-form-item label"附件" name"logUrl" placeholder""><a-uploadv-model:file-list"filesLists":customRequest"uploadFile"class"upload-list-inline&quo…