当前位置:首页 > 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的实现方法 通过Vue项目集成Grafana面板,可以采用以下几种方式实现: 使用iframe嵌入 在Vue组件中通过iframe标签加载Grafana面板URL。需要确…

react组件如何通讯

react组件如何通讯

React 组件通讯方式 React 组件间的通讯方式主要包括以下几种方法,适用于不同场景下的数据传递和状态管理需求。 父子组件通讯(Props 传递) 父组件通过 props 向子组件传递数据或回…

vue radio组件实现

vue radio组件实现

Vue Radio 组件实现 在 Vue 中实现 Radio 组件可以通过原生 HTML 的 <input type="radio"> 结合 Vue 的响应式特性来完成。以下是几种常见的实…

vue实现tooltips组件

vue实现tooltips组件

实现基础 Tooltip 组件 创建一个名为 Tooltip.vue 的单文件组件,包含模板、样式和逻辑: <template> <div class="tooltip-con…

elementui嵌套

elementui嵌套

ElementUI 嵌套组件的实现方法 ElementUI 提供了灵活的组件嵌套机制,允许开发者在表单、表格、对话框等组件中嵌套其他组件。以下是一些常见的嵌套场景和实现方式。 表单内嵌套其他组件 在…

vue实现组件缓存

vue实现组件缓存

Vue 组件缓存的实现方法 在 Vue 中实现组件缓存通常使用 <keep-alive> 内置组件,它可以缓存不活动的组件实例,避免重复渲染和销毁。 基本用法 <keep-aliv…