在vue.draggable.next拖拽差中使用组件时遇到的问题
Vue.Draggable
SortableJS/Vue.Draggable: Vue.Draggable 是 Sortable.js 的 Vue.js 封装组件,提供了拖放排序功能,可以在 Vue 应用中轻松实现列表元素的可拖拽重排。
项目地址:https://gitcode.com/gh_mirrors/vu/Vue.Draggable
免费下载资源
·
vue.draggable.next 中文文档 - itxst.com
问题描述:在draggable标签中定义的组件,通过ref不能正确拿到相应数组
一、代码-验证过程
在vue3中定义组件的ref,如果有多个相同名称的组件,会将ref.value的值变为数组。
在vue.draggable.next提供的draggable标签中定义组件,如果有多个相同名称的组件,ref.value的值为循环后的最后一个数据。
1、index.vue中的代码
<template>
<div class="">
<draggable
:list="perList"
ghost-class="ghost"
chosen-class="chosenClass"
animation="300"
@start="onStart"
@end="onEnd"
>
<template #item="{ element,index }">
<div class="item">
<TestChild :index="index" :info="element" ref="dragRef"/>
</div>
</template>
</draggable>
<hr>
<div v-for="i in 3" class="item">
<TestChild :index="i" :info="perList[i]" ref="vforChild"/>
</div>
</div>
</template>
<script setup lang="ts">
import { reactive, ref } from 'vue'
import draggable from "vuedraggable";
import TestChild from "./children/00-test.vue";
let dragRef = ref([])
let vforChild = ref([])
const perList = reactive([
{name:'薛薛',age:18},
{name:'婷婷',age:18},
{name:'大大',age:1},
{name:'小小',age:1},
])
function onStart(){
console.log(dragRef,'dragRef')
console.log(vforChild,'vforChild')
}
function onEnd(){
console.log('拖拽结束');
}
</script>
<style lang="scss" scoped>
.item{
width: 200px;
border: 1px solid #333;
margin: 3px auto;
}
</style>
2、子组件代码
<template>
<div class="">
{{ index }} - {{ info.name }}
</div>
</template>
<script setup lang="ts">
let props = defineProps(["index","info"])
defineExpose({name:props.info.name})
</script>
<style lang="scss" scoped>
</style>
3、页面打印结果
二、解决方式:使用回调函数形式定义组件的ref
代码如下:
<draggable
:list="perList"
ghost-class="ghost"
chosen-class="chosenClass"
animation="300"
@start="onStart"
@end="onEnd"
>
<template #item="{ element,index }">
<div class="item">
<TestChild :index="index" :info="element" :ref="r=>dragRef[index] = r"/>
</div>
</template>
</draggable>
//let dragRef = ref([])
打印结果:
GitHub 加速计划 / vu / Vue.Draggable
19.97 K
2.89 K
下载
SortableJS/Vue.Draggable: Vue.Draggable 是 Sortable.js 的 Vue.js 封装组件,提供了拖放排序功能,可以在 Vue 应用中轻松实现列表元素的可拖拽重排。
最近提交(Master分支:2 个月前 )
431db153 - 2 年前
017ab498 - 3 年前
更多推荐
已为社区贡献3条内容
所有评论(0)