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的方法,如:getElementById、querySelector等。请看下面的例子:

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,可以使用watch或onMounted确保自己已经获取到DOM。

参考资料

Vue3官方文档: 模板引用

相关推荐
Swot3 小时前
SvelteKit Remote Functions 使用指南
前端·后端
Cooper254 小时前
三源热榜去重加 AI 摘要:URL 唯一键踩出的三个坑
前端·python
Yk酱228404 小时前
A2UI探索随笔-技术选型
前端
前端繁华如梦4 小时前
# 从 73000 行压缩代码到 TypeScript 模块化:我把一个 Three.js FPS 游戏 1:1 复刻了一遍
前端
Penge6664 小时前
React Context 详解:从 Props 传递到跨组件状态共享
前端
Penge6664 小时前
React 事件处理:bind(this) 原理与实际开发常用写法
前端
ZhengEnCi4 小时前
小白用 AI 做官网完全指南:不用框架的六格清单,双击就能打开
前端·html·ai编程
zhanlang02175 小时前
HTML 零基础入门到企业实战【第五章 5.2】图片路径精讲:绝对路径、相对路径、网络路径(新手必踩坑点)
前端·html
夕水5 小时前
我用trae重构了ew-color-picker,一个插件化架构的现代颜色选择器
前端·javascript·开源
Penge6665 小时前
React JSX 核心语法:从入门到业务开发实战
前端