Uniapp 和Vue3 小程序 获取页面dom 方法

最近在写公司的小程序项目 技术框架 主要是Uniapp 和 Vue3

恰好有个需求是要 获取小程序页面dom 结构 用常见的vue3获取dom 结构不起效

记录一下

先给出正确答案

javascript 复制代码
<template>
  <view>
    <view>
      <view>Html</view>
      <view id="target">Css</view>
      <view>Javascrip</view>
    </view>
  </view>
</template>


<script setup>
import { getCurrentInstance } from 'vue';

const instance = getCurrentInstance();

const query = uni.createSelectorQuery().in(instance);

query.select('#target').boundingClientRect(data => {
  if (data) {
    console.log("获取到布局信息", data);
    // 这里返回的data就是我们需要的dom结构
  }
}).exec();
</script>

同时记录下错误答案

javascript 复制代码
const query = uni.createSelectorQuery().in(this);
query.select('#target').boundingClientRect(data => {
  console.log(data)
}).exec();

缺少 getCurrentInstance 导入 会报错 vendor.js? sm:2306 TypeError: Cannot read property 'route' of undefined

javascript 复制代码
  <view>
    <view>
      <view>Html</view>
      <view id="target" ref="cssRef">Css</view>
      <view>Javascrip</view>
    </view>
  </view>

import { ref,onMounted,nextTick } from "vue";

const cssRef = ref(null);

onMounted(() =>{
  console.log(cssRef.value)
})

nextTick(() =>{
  console.log(cssRef.value)
})

常用的vue3 获取dom 元素方法 只会打印null 不会获取到dom结构

由于小程序环境的限制,不能直接在setup函数内部使用ref来获取DOM元素,因为小程序的视图层是由小程序框架管理的,而不是浏览器的DOM。

还有一种获取dom结构的方法 自定义组件上绑定ref

使用ref获取自定义组件实例: 如果你需要获取的是自定义组件的实例,你可以在自定义组件上使用ref属性,然后在父组件的setup函数中通过ref来获取。

javascript 复制代码
// 自定义组件
export default {
  setup() {
    const myComponentRef = ref(null);

    return {
      myComponentRef
    };
  }
};

// 使用自定义组件的父组件
<template>
  <my-custom-component ref="myComponentRef" />
</template>

<script>
import MyCustomComponent from './MyCustomComponent.vue';

export default {
  components: {
    MyCustomComponent
  },
  setup() {
    const myComponentRef = ref(null);

    onMounted(() => {
      if (myComponentRef.value) {
        // 这里可以访问到自定义组件的实例
        console.log(myComponentRef.value);
      }
    });

    return {
      myComponentRef
    };
  }
};
</script>
相关推荐
达子66613 小时前
第10章_HarmonyOs开发图解 用JS开发UI
vue.js
奶糖 肥晨14 小时前
想return数据 返回的确是函数问题处理
vue.js
无巧不成书021814 小时前
Vue+Vue-CLI全平台零基础搭建教程
前端·javascript·vue.js·vue·前端开发·vue-cli·前端环境搭建
mykj155115 小时前
消费积分抵扣物业费小程序商城开发
小程序·积分商城抵扣物业费·积分商城小程序开发
张人玉15 小时前
基于 Vue 3 + ECharts + Express + SQLite 的可视化大屏与业务管理系统——YOLOv8 高精度车辆行人检测与计数系统
数据库·vue.js·yolo·sqlite·echarts·express
腻害兔1 天前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
三声三视1 天前
uni-app 鸿蒙端传参变成 [object Object]?顺着源码追到 ArkTS router 底层才搞明白
人工智能·ai·uni-app·aigc·ai编程·harmonyos
sugar__salt1 天前
Vue3 表单双向绑定与响应式核心 API 技术详解
前端·javascript·vue.js
郝亚军1 天前
使用Vue 3和Nginx打包和部署Vue.js项目的一般步骤
前端·vue.js·nginx
云迈科技-软件定制开发1 天前
2026年湖南长沙软件定制开发公司怎么选?本地企业做APP、小程序、管理系统的合作参考
小程序