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
相关产品推荐
相关产品推荐

