专业建设网站开发,乐陵seo公司,上海消费品网络营销推广公司,wordpress 过时在网上很多人说可以通过下面两种形式获取到指定dom元素
// 定义ref
div refbox/div//1通过this.$refs获取dom元素
this.$refs.box//2通过ref(null)获取dom元素
let box ref(null)第一种方式在vue2中是可以获取到的#xff0c;但是在vue3 setup中…在网上很多人说可以通过下面两种形式获取到指定dom元素
// 定义ref
div refbox/div//1通过this.$refs获取dom元素
this.$refs.box//2通过ref(null)获取dom元素
let box ref(null)第一种方式在vue2中是可以获取到的但是在vue3 setup中是没有this的需要通过getCurrentInstance方法获取当前组件实例所以这种方式排除
第二种方式在阅览器端是可以获取到的但是在小程序端是获取不到的这种方式可以获取到当前组件中的子组件实例所以这种方式也排除
下面分两种情况来介绍如何在uniapp vue3微信小程序端获取dom元素
一、当前组件非子组件
div idbox/div
//根据id获取
uni.createSelectorQuery().select(#box).node().exec(res {//res[0].node未获取到的指定的dom元素对象console.log(res,res[0].node)
})上面这种方式只适合在非子组件的情况下使用如果当前组件时作为子组件需要通过下面的方式
二、当前为子组件
div idbox/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 节点的组件实例。