You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VueDraggable嵌套列表无法创建新嵌套项问题求助

问题:VueDraggable嵌套列表无法创建新嵌套项

使用VueDraggable库实现嵌套列表,常规拖拽功能正常,但无法创建新的嵌套项——仅能在已存在的嵌套列表中插入或拖拽移出项。以下是实现代码:

<template>
    <div class="category-table">
        <draggable :list="items" item-key="id" @change="logList()" :group="{name: 'g1'}">
            <template #item="{ element }">
                <div class="category">
                    <div class="category-title">
                        <div class="category-title__text">
                            <div class="drag-drop">
                                <Iconbase name="DragDrop"></Iconbase>
                            </div>
                            {{ element[titleKey] }}
                        </div>
                        <div class="category-title__buttons">
                            <div v-if="element[nestedItemsKey] && element[nestedItemsKey].length"
                                @click="toggleNestedItems(element[idKey])"
                                :class="{ active: activeId === element[idKey], arrow: true }"
                            >
                                <Iconbase name="Arrowdown" height="10" width="10"></Iconbase>
                            </div>
                            <div class="edit">
                                <EditActions :id="element[idKey]" :options="actions" @editactions="action($event)" />
                            </div>
                        </div>
                    </div>
                    <div class="divider-container" v-if="activeId === element[idKey]">
                        <hr class="divider" />
                    </div>
                    <!--<div v-if="activeId === element[idKey] && element[nestedItemsKey]">-->
                    <NestedDraggable v-if="element[nestedItemsKey]"
                                     :items="element[nestedItemsKey]"
                                     :titleKey="titleKey"
                                     :nestedItemsKey="nestedItemsKey"
                                     @action="action($event)"
                    ></NestedDraggable>
                </div>
            </template>
        </draggable>
    </div>
</template>

<script lang="ts" setup>
import draggable from 'vuedraggable'
import NestedDraggable from '@/components/ui/draggable/NestedDraggable.vue'
import EditActions from '@/components/ui/button/EditActions.vue'
import Iconbase from '@/components/icons/Iconbase.vue'
import { ref, defineProps, computed } from 'vue'

// Component props
const props = defineProps({
    items: {
        type: Array,
        required: true
    },
    // This is universal component which should handle any items object with its own keys.
    // Keys which component will use to access items object properties.
    // Component uses this: id, title, description, nestedItemsKey
    idKey: {
        type: String,
        default: 'id',
    },
    titleKey: {  // The item.key which will be used as title
        type: String,
        default: 'title',
    },
    nestedItemsKey: {  // The item.key where nested items are stored eg. item.children or item.subcategory
        type: String,
        default: 'subcategory'
    },
    translateKeys: []
})

// Component emits (events)
const emit = defineEmits(['action'])

// EditActions component options
const actions = [
    { name: 'create_nested_item', ico: 'Pluscircle' },
    { name: 'edit', ico: 'Penciledit' },
    { name: 'delete', ico: 'Delete' }
]

let activeId = ref(-1)

function logList() {
    console.log('change')
    console.log(props.items)
}

function action(event) {
    console.log('NestedDraggable action')
    console.log(event)
    emit('action', event)
}

function toggleNestedItems(id) {
    console.log('toggleOpen')
    console.log(id)
    activeId.value = activeId.value === id
        ? -1   // Zatvorí sa aktívny accordion
        : id  // Otvorí sa vybraný accordion
}

</script>

内容的提问来源于stack exchange,提问作者Čamo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 11:37:51