当前位置:首页 > VUE

vue实现拖拽实现组件嵌套

2026-03-28 06:00:00VUE

Vue 拖拽实现组件嵌套

使用 vue-draggable-next 库

vue-draggable-next 是基于 Sortable.js 的 Vue 3 拖拽组件库,支持组件嵌套拖拽。

安装依赖:

vue实现拖拽实现组件嵌套

npm install vue-draggable-next

基础实现代码:

<template>
  <draggable 
    v-model="list"
    group="components"
    @end="onDragEnd">
    <component
      v-for="(item, index) in list"
      :key="item.id"
      :is="item.type"
      v-bind="item.props"/>
  </draggable>
</template>

<script setup>
import { ref } from 'vue';
import draggable from 'vue-draggable-next';

const list = ref([
  { id: 1, type: 'ComponentA', props: { title: 'A' } },
  { id: 2, type: 'ComponentB', props: { content: 'B' } }
]);
</script>

嵌套拖拽实现

对于多层嵌套结构,需要递归使用 draggable 组件:

vue实现拖拽实现组件嵌套

<template>
  <draggable
    v-model="treeData"
    group="nested"
    item-key="id">
    <template #item="{ element }">
      <div class="node">
        {{ element.name }}
        <nested-draggable 
          v-if="element.children"
          :items="element.children"/>
      </div>
    </template>
  </draggable>
</template>

<script>
export default {
  components: {
    NestedDraggable: () => import('./NestedDraggable.vue')
  }
}
</script>

自定义拖拽手柄

通过 handle 属性指定可拖拽区域:

<draggable handle=".handle">
  <div v-for="item in items">
    <span class="handle">≡</span>
    {{ item.text }}
  </div>
</draggable>

拖拽状态样式控制

通过 CSS 类名控制拖拽过程中的样式变化:

.draggable-item {
  transition: all 0.3s;
}
.draggable-item.sortable-chosen {
  background: #f0f0f0;
}
.draggable-item.sortable-ghost {
  opacity: 0.5;
}

注意事项

  • 需要为每个可拖拽元素设置唯一的 key
  • 嵌套结构的数据需要包含 children 字段
  • 跨组件拖拽需要保持相同的 group 名称
  • 移动端需要额外处理 touch 事件

标签: 嵌套组件
分享给朋友:

相关文章

vue嵌套grafana实现

vue嵌套grafana实现

Vue 中嵌套 Grafana 的实现方法 使用 iframe 嵌入 Grafana 面板 在 Vue 项目中可以通过 iframe 直接嵌入 Grafana 的面板或仪表板。确保 Grafana 已…

vue实现组件循环图片

vue实现组件循环图片

Vue 实现组件循环图片的方法 在 Vue 中实现组件循环图片通常可以通过 v-for 指令结合动态数据绑定完成。以下是几种常见的实现方式: 使用静态图片路径数组 假设有一组本地图片路径,可以通过数…

如何设计react组件

如何设计react组件

设计 React 组件的核心原则 React 组件的设计需要遵循高内聚、低耦合的原则,确保组件功能独立且易于维护。组件的设计可以分为展示组件和容器组件两类,展示组件负责 UI 渲染,容器组件负责逻辑处…

vue组件实现vmodel

vue组件实现vmodel

Vue 组件实现 v-model 在 Vue 中,v-model 是双向数据绑定的语法糖,默认情况下绑定 value 属性并监听 input 事件。在自定义组件中实现 v-model 需要正确配置 p…

react如何刷新组件

react如何刷新组件

刷新 React 组件的常见方法 使用状态更新触发重新渲染 通过修改组件的状态(state),React 会自动触发重新渲染。例如: const [count, setCount] = useSta…

vue实现列表组件

vue实现列表组件

Vue 列表组件实现方法 基础列表渲染 使用 v-for 指令渲染数组数据,需配合 :key 提升性能: <template> <ul> <li v-for…