uni-app 在@regionchange中调用map实例的getScale不生效 success和fail回调都不执行
uni-app 在@regionchange中调用map实例的getScale不生效 success和fail回调都不执行
操作步骤:
- 下载附件代码解压
- 项目有使用map拓展插件 需要打包自定义基座进行调试复现!
- 附件代码说明:
- 页面位置:/pages/index/index
- 第一个复现bug方法位于:/pages/subNvue/map.nvue
- 第二个复现bug方法位于:/pages/subNvue/vue3_public_uniGetMap.nvue
- 第三个复现bug方法位于:/pages/subNvue/vue3_setup_refGetMap.nvue
- 第四个复现bug方法位于:/pages/subNvue/vue3_setup_uniGetMap.nvue 复现流程:修改page.json中的pages[0].style.app-plus.subNVues.path进行访问
预期结果:
- getScale进入成功or失败回调
实际结果:
- getScale未进入成功or失败回调
bug描述:
- 场景:vue页面中使用subNvue访问的nvue页面中存在的map。
- bug:在nvue页面的map组件@regionchange中调用map实例的getScale不生效,success和fail都不进
- 使用选项式vue3进行开发,使用this.$ref.map进行获取map实例,在@regionchange触发时调用实例.getScale,不生效(成功回调、错误回调均未进入)
- 使用选项式vue3进行开发,使用uni.createMapContext(mapId, this)进行获取map实例,在@regionchange触发时调用实例.getScale,不生效(成功回调、错误回调均未进入)
- 使用组合式vue3进行开发,使用let map = ref(’’)进行map实例获取,在@regionchange触发时调用实例.getScale,不生效(成功回调、错误回调均未进入)
- 使用组合式vue3进行开发,使用let map = {}, 在onMounted生命周期使用uni.createMapContext(mapId)进行map实例获取,在@regionchange触发时调用实例.getScale,不生效(成功回调、错误回调均未进入)
| 项目信息 | 描述 |
|---|---|
| 产品分类 | uniapp/App |
| PC开发环境操作系统 | Windows |
| PC开发环境版本号 | window11专业版 23H2 |
| HBuilderX类型 | 正式 |
| HBuilderX版本号 | 4.15 |
| 手机系统 | Android |
| 手机系统版本号 | Android 12 |
| 手机厂商 | 华为 |
| 手机机型 | nova10 |
| 页面类型 | nvue |
| Vue版本 | vue3 |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
更多关于uni-app 在@regionchange中调用map实例的getScale不生效 success和fail回调都不执行的实战教程也可以访问 https://www.itying.com/category-93-b0.html
h5和微信小程序也失效了,都几个月了也不解决
更多关于uni-app 在@regionchange中调用map实例的getScale不生效 success和fail回调都不执行的实战教程也可以访问 https://www.itying.com/category-93-b0.html
而且我又发现了个新的bug https://ask.dcloud.net.cn/question/203400
我刚刚又测试了一下没有用subNvue的nvue页面直接使用nvue当作首页 其他什么操作都没有,只在@regionchange被调用时去调用getScale也是不生效的!!!!!!!!!!!!!!官方大大救命啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
test.zip是代码包 直接真机调试就可以复现,我的机子跟上述描述一致,bug能复现
这个是丢subNvue里的然后用uni.createMapContext获取实例后进行调用,返回的是空对象
最新消息 确定是由于嵌套在subNvue中导致无法正确使用 在普通nvue页面可以使用
在 uni-app 中,@regionchange 事件是用于监听地图区域变化的事件。你提到在 @regionchange 事件中调用 map 实例的 getScale 方法时,success 和 fail 回调都不执行,可能有以下几种原因:
1. getScale 方法调用时机不正确
@regionchange 事件可能会频繁触发,尤其是在地图缩放或拖动时。如果 getScale 方法在事件触发时没有正确执行,可能是因为事件触发时地图还未完全准备好。
2. map 实例未正确初始化
确保在调用 getScale 方法时,map 实例已经正确初始化。如果 map 实例还未准备好,调用 getScale 方法可能会失败。
3. 回调函数未正确绑定
确保 success 和 fail 回调函数已正确绑定,并且函数名和参数都正确。
4. 异步问题
getScale 方法可能是异步的,确保在回调函数中正确处理异步操作。
示例代码
以下是一个示例代码,展示如何在 @regionchange 事件中调用 getScale 方法:
<template>
<view>
<map
id="myMap"
:latitude="latitude"
:longitude="longitude"
:scale="scale"
@regionchange="onRegionChange"
></map>
</view>
</template>
<script>
export default {
data() {
return {
latitude: 39.909,
longitude: 116.39742,
scale: 14,
mapContext: null,
};
},
mounted() {
// 获取地图上下文
this.mapContext = uni.createMapContext('myMap', this);
},
methods: {
onRegionChange(e) {
if (e.type === 'end') {
// 在地图区域变化结束时调用 getScale
this.mapContext.getScale({
success: (res) => {
console.log('当前地图的缩放级别:', res.scale);
},
fail: (err) => {
console.error('获取缩放级别失败:', err);
},
});
}
},
},
};
</script>

