近来在写公司的小程序项目 技能框架 主要是Uniapp 和 Vue3
恰好有个需求是要 获取小程序页面dom 结构 用常见的vue3获取dom 结构不起效
记录一下
先给出准确答案
- <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>
复制代码 同时记录下错误答案
- 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
- <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来获取。
- // 自定义组件
- 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>
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |