vue3动态绑定ref并获取其dom实现方式
作者:meng半颗糖
Vue3中动态绑定ref建议用对象存储,通过索引访问嵌套元素;或使用计算属性获取DOM,两种方法可提升灵活性,适用于v-for循环场景,便于操作单/多层嵌套结构
vue3动态绑定ref并获取其dom
方法1:v-for
在 v-for
中建议用对象存储 refs 而非数组
- 函数参数
el
:动态绑定时会传入当前 DOM 元素或组件实例
<template> <div v-for="item in items" :key="item.id"> <div :ref="(el) => setItemRef(el, item.id)"></div> </div> </template> <script setup> import { ref } from 'vue' const items = ref([{ id: 1 }, { id: 2 }]) const itemRefs = ref({}) const setItemRef = (el, id) => { if (el) { itemRefs.value[id] = el // 存储 DOM 引用 } } onMounted(() => { console.log(itemRefs.value) // 输出 {1: div, 2: div} }) </script>
for
循环 可使用单/多层 嵌套
<!-- 单层循环 --> <div v-for="(item, index) in list" :key="index"> <input :ref="(el) => (refsArray[index] = el)" /> </div> <!-- 嵌套循环 --> <div v-for="(group, i) in groups" :key="i"> <div v-for="(item, j) in group.items" :key="j"> <input :ref="(el) => (nestedRefs[i][j] = el)" /> </div> </div>
通过 refsArray[index]
或 nestedRefs[i][j]
即可访问嵌套元素
方法2:使用计算属性
const getRefName = (index) => `itemRef_${index}`
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。