uni-app 在@regionchange中调用map实例的getScale不生效 success和fail回调都不执行

uni-app 在@regionchange中调用map实例的getScale不生效 success和fail回调都不执行

操作步骤:

  • 下载附件代码解压
  • 项目有使用map拓展插件 需要打包自定义基座进行调试复现!
  • 附件代码说明:
    1. 页面位置:/pages/index/index
    2. 第一个复现bug方法位于:/pages/subNvue/map.nvue
    3. 第二个复现bug方法位于:/pages/subNvue/vue3_public_uniGetMap.nvue
    4. 第三个复现bug方法位于:/pages/subNvue/vue3_setup_refGetMap.nvue
    5. 第四个复现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都不进
    1. 使用选项式vue3进行开发,使用this.$ref.map进行获取map实例,在@regionchange触发时调用实例.getScale,不生效(成功回调、错误回调均未进入)
    2. 使用选项式vue3进行开发,使用uni.createMapContext(mapId, this)进行获取map实例,在@regionchange触发时调用实例.getScale,不生效(成功回调、错误回调均未进入)
    3. 使用组合式vue3进行开发,使用let map = ref(’’)进行map实例获取,在@regionchange触发时调用实例.getScale,不生效(成功回调、错误回调均未进入)
    4. 使用组合式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

7 回复

h5和微信小程序也失效了,都几个月了也不解决

更多关于uni-app 在@regionchange中调用map实例的getScale不生效 success和fail回调都不执行的实战教程也可以访问 https://www.itying.com/category-93-b0.html


我刚刚又测试了一下没有用subNvue的nvue页面直接使用nvue当作首页 其他什么操作都没有,只在@regionchange被调用时去调用getScale也是不生效的!!!!!!!!!!!!!!官方大大救命啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

test.zip是代码包 直接真机调试就可以复现,我的机子跟上述描述一致,bug能复现

这个是丢subNvue里的然后用uni.createMapContext获取实例后进行调用,返回的是空对象

最新消息 确定是由于嵌套在subNvue中导致无法正确使用 在普通nvue页面可以使用

uni-app 中,@regionchange 事件是用于监听地图区域变化的事件。你提到在 @regionchange 事件中调用 map 实例的 getScale 方法时,successfail 回调都不执行,可能有以下几种原因:

1. getScale 方法调用时机不正确

@regionchange 事件可能会频繁触发,尤其是在地图缩放或拖动时。如果 getScale 方法在事件触发时没有正确执行,可能是因为事件触发时地图还未完全准备好。

2. map 实例未正确初始化

确保在调用 getScale 方法时,map 实例已经正确初始化。如果 map 实例还未准备好,调用 getScale 方法可能会失败。

3. 回调函数未正确绑定

确保 successfail 回调函数已正确绑定,并且函数名和参数都正确。

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>
回到顶部