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([])
打印结果: