return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('11111111');
try {
const query = uni.createSelectorQuery().in(this).select(`#${this.grid_id}`);
console.log('22222222222222');
query.boundingClientRect(data => {
console.log('获取元素尺寸');
console.log(data);
if (data.width) {
resolve(data);
} else {
reject();
}
}).exec();
console.log('33333333333333333');
} catch (error) {
console.error(error);
}
console.log('44444444444444');
}, 100);
}) - 发布:2025-10-06 18:16
- 更新:2025-10-07 00:34
- 阅读:78
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: 11
HBuilderX类型: 正式
HBuilderX版本号: 4.76
手机系统: Android
手机系统版本号: Android 10
手机厂商: 华为
手机机型: vivo Y52s
页面类型: vue
vue版本: vue2
打包方式: 云端
项目创建方式: HBuilderX
示例代码:
操作步骤:
如上所述
如上所述
预期结果:
获取节点尺寸
获取节点尺寸
实际结果:
无法获取并报错
无法获取并报错
bug描述:
用v-if做登录判断,登录后显示指定内容,但是需要获取节点的尺寸来控制大小,所以使用了uni.createSelectorQuery()来获取节点尺寸,但是总是会报错,并且获取不到真实的尺寸
如果去掉这个v-if判断,那就没有问题,也不会报错,但这不符合逻辑啊。
搜索网上相关资料,用setTimeout解决,完全没有用,报错后也无法捕获,代码执行到query.boundingClientRect里面就停止并报错了
Error: Not Found:Page[3][-1,22] at view.umd.min.js:1
1 个回复
追梦随想 (作者)
经过无数次测试发现,打开登录页面登录成功后,如果用
uni.$emit()传递参数,数据页面使用uni.$on()接收参数并赋值登录状态,这种情况就会引起报错。如果在
onShow()里面用本地缓存判断登录状态并赋值,不会报错。实在是无语了,折腾了不知道几天几夜,总是遇到这种奇葩问题,也不知道该说你们的技术好还是坏了...