Vue3: 获取元素DOM的方法

Vue3中获取dom的方法有两种 : ref模板引用和传统方法

1.ref模板引用

模板引用是官方提出的方法,请看下面的例子:

JavaScript 复制代码
<template>
    <canvas ref="solarCanvas" id="solar" width="1300" height="900"></canvas>
</template>

<script setup>
import {  onMounted, ref } from 'vue'

const solarCanvas = ref(null)
onMounted(() => {
  console.log(solarCanvas.value)//HTMLCanvasElement{...}
})
</script>

这里要注意的是只可以在组件挂载后 才能访问模板引用 ,上面的例子中onMounted执行时组件已经挂载了 , 所以打印solarCanvas有值。

JavaScript 复制代码
<template>
    <canvas ref="solarCanvas" id="solar" width="1300" height="900"></canvas>
</template>

<script setup>
import {  onMounted, ref } from 'vue'

const solarCanvas = ref(null)
console.log(solarCanvas.value)//null
</script>

反之,如果这样写打印出来的值就为null,因为此时组件还没有挂载完成。

2.传统方法

传统方法就是指使用JS原生的获取dom的方法,如:getElementByIdquerySelector等。请看下面的例子:

JavaScript 复制代码
<template>
    <canvas id="solar" width="1300" height="900"></canvas>
</template>

<script setup>
import { nextTick, onMounted, ref } from 'vue'

onMounted(() => {
  const canvas = document.getElementById('solar')
  console.log(canvas)//HTMLCanvasElement{...}
})
</script>

同样的道理,如果使用传统方法获取dom时,组件没有挂载完成的话,那么获取到的也是null

JavaScript 复制代码
<template>
    <canvas id="solar" width="1300" height="900"></canvas>
</template>

<script setup>
import { nextTick, onMounted, ref } from 'vue'

const canvas = document.getElementById('solar')
onMounted(() => {
  console.log(canvas)//null
})
</script>

3.结论

在Vue3当获取DOM的方法主要有两个:模板引用和传统方法。

但需要注意的是,无论使用哪种方法都只有在组件挂载之后才能获取到DOM,可以使用watchonMounted确保自己已经获取到DOM。

参考资料

Vue3官方文档: 模板引用

相关推荐
程序员黑豆15 分钟前
AI全栈开发之Java:怎么安装JDK
前端·ai编程·全栈
周杰伦fans16 分钟前
AutoCAD C# 二次开发:如何精确监听工作空间切换事件
前端·c#
丷丩31 分钟前
MapLibre GL JS第41课:向地图添加图标
前端·javascript·mapbox·maplibre gl js
英俊潇洒美少年36 分钟前
前端性能优化:非关键脚本/第三方资源异步加载全解(彻底解决首屏阻塞)
前端·性能优化
如果超人不会飞1 小时前
TinyVue 组件库实战指南:从安装到上手一篇就够了
vue.js
开飞机的舒克_1 小时前
vue3+router动态权限路由
前端·vue.js
VitoChang1 小时前
放弃手搓路由吧!用 SolidStart 搞 SPA,真香
前端
GuWenyue1 小时前
告别JS类型坑!Ts为什么在ai时代逐渐成为"第一"语言
前端·算法·typescript
三乐2281 小时前
事件循环是什么东西,一篇文章带你了解
前端·javascript
wuhen_n1 小时前
RAG 核心:向量嵌入与本地向量数据库实战
前端·langchain·ai编程