拖动组件 vue-draggable-next 跨组件和clone问题

跨组件交互问题

问题描述:

当A,B组件 把 VueDraggableNext 都封装到其内部的时候,让A,B组件可以交互,比如把A中的数据元素拖动到B组件中,但是如果按照 每个组件都分别引用 VueDraggableNext 那么 A,B 组件之间分辨是两个实例,他们之间变不能交互。

解决方案:

VueDraggableNext 组件作为一个全局引用,A,B组件共同应用这个组件的,那么就是一个组件实例。

在vue3 中

ts 复制代码
//main.ts

import { VueDraggableNext } from 'vue-draggable-next'

const app = createApp(App)
app.provide('VueDraggableNext', VueDraggableNext)
ts 复制代码
// A组件
const VueDraggableNext = inject('VueDraggableNext')
ts 复制代码
// B组件
const VueDraggableNext = inject('VueDraggableNext')

这样就可以两个组件之间进行交互。

clone模式问题

问题描述

list 中的数据是个多层嵌套的对象,每次把list中的对象拖动新的组件数组中,并没有clone对象,而是引用原对象,不然拖拽第二个组件将会和第一个组件一模一样,改变第一个组件第二个、第三个也会跟着变动。解决方案是使用clone属性函数中拦截clone数据,让其创建新对象。

TS 复制代码
<template>
  <VueDraggableNext  
    :group="{ name:'ComponentList', pull:'clone', put:true }"
    :list="list"
    :force-fallback="true"
    :fallback-class="true"
    :fallback-on-body="false"
    item-key="id"
    @clone='cloneA' // 这里获取的是个原生对象相关的
    // 这里是获取的list中的某一项,拦截处理数据后会被拖动到另一个List
     :clone="(el:any) => { 
      const  clone = deepClone(el)
      return  clone
     }"
     :animation="500"
     >
     <div v-for="(item,index) in list" :key="index"></div>
   </VueDraggableNext>
</template>
相关推荐
腻害兔17 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:IM 即时通讯模块,一个被低估的「全功能聊天系统」
java·前端·vue.js·产品经理·ai编程
妙码生花19 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(三十九):前端上传组件实现
javascript·vue.js·ai编程
JoyT21 小时前
Nuxt 3的核心设计与静态官网应用
前端·javascript·vue.js
无人生还1 天前
从 Vue3 到 React · 快速上手系列第 5 篇:事件处理与表单(受控组件 vs v-model)
前端·vue.js·react.js
乌夷1 天前
vue知识点
前端·javascript·vue.js
daols881 天前
vue vxe-context-menu 通用右键菜单组件使用
前端·javascript·vue.js·vxeui
腻害兔1 天前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:MES 制造执行模块,一个被严重低估的「工业级 ERP 核心」
vue.js·产品经理·制造
勇往直前plus1 天前
Vue3(篇一) 核心概念——响应式模板语法与组件基础
前端·javascript·vue.js
咩咩啃树皮1 天前
第43篇:Vue3计算属性(computed)完全精讲——缓存机制、依赖计算、业务最优解
前端·vue.js·缓存
郝亚军2 天前
webstorm如何创建vue 3.js
javascript·vue.js·webstorm