uniapp vue3微信小程序如何获取dom元素

在网上很多人说可以通过下面两种形式获取到指定dom元素

js 复制代码
// 定义ref
<div ref="box"></div>

//1通过this.$refs获取dom元素
this.$refs.box

//2通过ref(null)获取dom元素
let box = ref(null)

第一种方式在vue2中是可以获取到的,但是在vue3 setup中是没有this的(需要通过getCurrentInstance方法获取当前组件实例),所以这种方式排除

第二种方式在阅览器端是可以获取到的,但是在小程序端是获取不到的(这种方式可以获取到当前组件中的子组件实例),所以这种方式也排除

下面分两种情况来介绍如何在uniapp vue3微信小程序端获取dom元素

一、当前组件非子组件

js 复制代码
<div id="box"></div>
//根据id获取
uni.createSelectorQuery().select('#box').node().exec(res => {
		//res[0].node未获取到的指定的dom元素对象
		console.log("res",res[0].node)
})

上面这种方式,只适合在非子组件的情况下使用,如果当前组件时作为子组件,需要通过下面的方式

二、当前为子组件

js 复制代码
<div id="box"></div>
//根据id获取
const instance = getCurrentInstance();//获取当前组件实例
uni.createSelectorQuery().in(instance).select('#box').node().exec(res => {
		//res[0].node未获取到的指定的dom元素对象
		console.log("res",res[0].node)
})

注意:这种情况下需要传入当前组件的是你instance才能获取到指定dom元素

为啥子组件要多加一个instance才能获取到dom元素?

因为在 Vue 3 中,子组件实例不再直接暴露给全局或者父组件,而是需要通过 getCurrentInstance() 方法获取。这是为了更好地管理组件实例,确保组件在不同环境中的正确渲染和状态管理。通过 uni.createSelectorQuery().in(instance) 方法可以指定查询的范围,这里的 instance 需要是一个 DOM 节点或者一个包含 DOM 节点的组件实例。

相关推荐
考拉讲支付9 小时前
延迟分账 / 核销分账的技术实现方案:服务完成后再分钱,到底怎么设计?
大数据·运维·人工智能·微信小程序·小程序·系统架构
Newway32113 小时前
便利店小程序商城如何打通总部、门店与会员
小程序·小程序商城·会员运营·连锁便利店·门店订货·o2o系统
Strawberry9613 小时前
小程序视频播放官方方案
小程序
weixin_1772972206916 小时前
二手旧物回收小程序先要解决的不是下单,是“上门之后价格变了怎么办“
小程序·apache
青企通16 小时前
电动车门店小程序:以旧换新估价、维修工单与电池档案的设计实现
小程序
努力变的更好17 小时前
H5与小程序之间的回调
前端·小程序·apache
镭封1 天前
自媒体内容生产怎么提速?文案整理、配音与剪辑流程
人工智能·小程序·音视频·语音识别·媒体
anyup1 天前
uView Pro X 1.0.0 发布:全面支持 uni-app x 蒸汽模式,80+ 组件
前端·uni-app·ai编程
科威网络1 天前
小程序开发性能优化:分包、预加载与启动时间
性能优化·微信小程序·小程序
zhongben123_2 天前
从零开发一个打车APP:技术选型、系统架构与成本评估指南
大数据·运维·ios·系统架构·uni-app·web app