uni-app vue2 安卓 ios web slider组件都不能通过id获取节点信息 vue3可以

uni-app vue2 安卓 ios web slider组件都不能通过id获取节点信息 vue3可以

开发环境 版本号 项目创建方式
Mac 11 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Mac

手机系统:Android

手机系统版本号:Android 15

手机厂商:华为

手机机型:oppo

页面类型:vue

vue版本:vue2

打包方式:离线

操作步骤:

  • 运行上述代码

预期结果:

  • 可以拿到节点信息

实际结果:

  • 拿不到

bug描述:

使用下面的代码运行到web,app端  

```vue
<template>  
    <slider id="slider"></slider>  
</template>  

<script>  
    export default {  
        methods: {  
            handleClick() {  
                const query = uni.createSelectorQuery().in(this);  
                query  
                    .select("#slider")  
                    .boundingClientRect((data) => {  
                        console.log("data: ", data);  
                    })  
                    .exec();  
            }  
        }  
    }  
</script>

更多关于uni-app vue2 安卓 ios web slider组件都不能通过id获取节点信息 vue3可以的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

临时解决方案
分别替换 /Applications/HBuilderX.app/Contents/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/uni-h5/dist/index.umd.min.js 和 /Applications/HBuilderX.app/Contents/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/uni-app-plus/dist/view.umd.min.js 为附件的文件

更多关于uni-app vue2 安卓 ios web slider组件都不能通过id获取节点信息 vue3可以的实战教程也可以访问 https://www.itying.com/category-93-b0.html


感谢反馈,问题已复现,已加分

4.71.2025061206-alpha 已修复,可升级到此版本

这是一个已知的uni-app在Vue2中的兼容性问题。在Vue2版本中,uni.createSelectorQuery()方法无法正确获取slider组件的节点信息,但在Vue3版本中可以正常工作。

原因分析:

  1. 在Vue2环境下,uni-app对原生组件(如slider)的DOM节点处理存在差异
  2. 原生组件在Vue2中可能没有完全映射到DOM树中

临时解决方案:

  1. 使用ref替代id选择器:
<template>
    <slider ref="mySlider"></slider>
</template>

<script>
export default {
    methods: {
        handleClick() {
            this.$nextTick(() => {
                const query = uni.createSelectorQuery().in(this);
                query
                    .select(`.uni-slider[data-ref=${this.$refs.mySlider._uid}]`)
                    .boundingClientRect((data) => {
                        console.log("data: ", data);
                    })
                    .exec();
            });
        }
    }
}
</script>
回到顶部