vue3中ref获取dom的方式(包含for循环)

如何在Vue3中通过ref获取dom元素,这里说一下我遇到的情况和使用方式

情况一:只是单纯的获取某个dom元素

这种情况比较简单,直接在js中通过ref定义一个和html中元素上ref相同名字的变量即可

例子:

<template>
  <div class="box" ref="boxRef">
    box
  </div>
</template>

<script lang="ts" setup>
import { onMounted, ref } from 'vue';

const boxRef = ref<HTMLElement>() // 这里定义一个和div中ref名字一样的变量名即可

onMounted(() => {
  if (boxRef.value) {
    console.log(boxRef.value)
  }
})
</script>

在这里插入图片描述

情况二:在for循环中获取dom元素

这种情况下,我们可以通过动态设置ref的形式进行设置ref,这样我们就可以获取到一个ref的数组

例子:

<template>
  <div class="box">
    <div v-for="item in 10" :key="item" :ref="setBoxRef">
      box
    </div>
  </div>
</template>

<script lang="ts" setup>
import { onMounted, ref } from 'vue';

const boxRefs = ref<HTMLElement[]>([])
const setBoxRef = (el: any) => {
  if (el) {
    boxRefs.value.push(el)
  }
}

onMounted(() => {
  console.log(boxRefs.value)
})
</script>

在这里插入图片描述

情况三:获取ref中的ref

这种情况我们不能像Vue2的方式一样通过refs.refs或者.children的形式,因为你会发现,这些方法都不能用了
所以要解决这个问题,我们需要借助Vue3提供的新的方法getCurrentInstance

需要注意的是,getCurrentInstance只能在setup或者生命周期中使用才有效
具体参考官方文档:https://v3.cn.vuejs.org/api/composition-api.html#getcurrentinstance
例子:

<template>
  <div class="box" ref="boxRef">
    <div ref="boxInnerRef">
      <div ref="innerRef">
        innerRef
      </div>
    </div>
  </div>
</template>

<script lang="ts" setup>
import { onMounted, getCurrentInstance } from 'vue';
onMounted(() => {
  const instance = getCurrentInstance()
  if (instance) {
    console.log(instance.refs)
  }
})
</script>

在这里插入图片描述
我们可以看到,不管多少层的ref,Vue3都给处理成了一层的Object形式,我们就能很方便的拿到自己需要的dom元素了

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
Vue 3,可以使用ref属性获取多个DOM元素。通过在v-for循环动态绑定ref属性,并定义一个获取对应DOM元素的回调函数,可以实现这一功能。具体步骤如下: 1. 在模板使用v-for循环来创建多个元素,并在每个元素上绑定ref属性。 2. 在setup函数定义一个空数组,准备接收循环DOM元素。 3. 定义一个动态ref所对应的回调函数,将获取到的DOM元素push到空数组。 4. 将回调函数返回给模板,这样就可以获取到多个DOM元素。 请注意,由于获取多个DOM元素是在循环进行的,所以需要在组件挂载后,即onMounted生命周期钩子获取DOM元素。这样可以确保在获取DOM元素时,它们已经存在于DOM。 以下是一个示例代码: <<引用:1.获取 v-for 循环的结点,需要动态绑定 ref 属性,并定义一个获取对应DOM元素的回调函数。 <template> <h3 :ref="getlist" v-for="index in 3">我是一组元素{{index}}</h3> </template> <script> import { ref, onMounted } from 'vue' export default { name: 'Ref', setup () { // 定义一个空数组,准备接收循环DOM元素 let listDom = [] // 定义动态ref所对应的回调函数,将获取到的DOM元素push到空数组 const getlist = (el) => { listDom.push(el) } // 在组件挂载后获取DOM元素 onMounted(() => { console.log(listDom) // 输出获取到的多个DOM元素 }) return { getlist } } } </script> 引用:参考:(28条消息) vue3通过ref属性获取DOM_李公子丶的博客-CSDN博客_vue3 通过ref获取dom

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值