用户3066482
用户3066482
  • 发布:2026-05-21 14:10
  • 更新:2026-05-21 14:32
  • 阅读:17

【报Bug】subNvue实现地图功能发现的问题

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 10 家庭中文版 21H2

HBuilderX类型: 正式

HBuilderX版本号: 5.07

手机系统: Android

手机系统版本号: Android 9.0

手机厂商: 模拟器

手机机型: 雷电

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

业务代码不方便贴

操作步骤:

1、主页面是vue,使用subNvue实现的地图,在subNvue中使用uni.createMapContext()获取到的地图对象调用方法不生效;比如聚合的initMarkerCluster等等。

2、地图缩放事件regionchange返回的e.scale是undefined

3、使用高德的key在subNvue中标点joinCluster设置为true后缩放几次后应用会闪退

预期结果:

1、主页面是vue,使用subNvue实现的地图,在subNvue中使用uni.createMapContext()获取到的地图对象调用方法不生效;比如聚合的initMarkerCluster等等。

2、地图缩放事件regionchange返回的e.scale是undefined

3、使用高德的key在subNvue中标点joinCluster设置为true后缩放几次后应用会闪退

实际结果:

1、主页面是vue,使用subNvue实现的地图,在subNvue中使用uni.createMapContext()获取到的地图对象调用方法不生效;比如聚合的initMarkerCluster等等。

2、地图缩放事件regionchange返回的e.scale是undefined

3、使用高德的key在subNvue中标点joinCluster设置为true后缩放几次后应用会闪退

bug描述:

1、主页面是vue,使用subNvue实现的地图,在subNvue中使用uni.createMapContext()获取到的地图对象调用方法不生效;比如聚合的initMarkerCluster等等。

2、地图缩放事件regionchange返回的e.scale是undefined

3、使用高德的key在subNvue中标点joinCluster设置为true后缩放几次后应用会闪退

2026-05-21 14:10 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

感谢你的反馈,我们仔细查看了你提交的内容。从官方评审角度看,这份 bug 反馈在完整性上还有比较大的提升空间,主要问题在于:

  1. 缺少可复现代码示例:你在示例中仅写了“业务代码不方便贴”,这让我们几乎无法在本地还原场景。要定位 createMapContext 返回的对象方法不生效、initMarkerCluster 无效这类问题,至少需要提供一个最小化的 nvue/subNVue 页面,包含 <map> 组件、获取 context 并调用方法的片段。
  2. 复现步骤太模糊:复现步骤只是把问题描述重复了一遍,没有描述清楚具体的操作流程、数据样式(比如 markers 是如何构造的、有没有开启 joinCluster)、以及操作后有无任何报错日志或界面异常截图。缺少这些线索,我们很难判断是配置问题还是引擎 bug。
  3. 预期结果和实际结果过于笼统:预期结果“应该生效”和实际结果“不生效”这种描述缺少技术细节,比如调用 initMarkerCluster 后是否有 success/fail 回调,regionchange 的参数到底返回了什么。更精确的信息可以帮助我们快速定位。

针对你反馈的三个现象,我结合知识库和已有信息给出一些分析:

关于 uni.createMapContext 获取的对象调用 initMarkerCluster 等方法不生效
initMarkerClusterApp-nvue 3.1.0+ 中是明确支持的(文档)。但如果是在 subNVue 子页面中使用,需要注意 uni.createMapContext 需要正确传入当前页面的实例 this,并且 map 组件的 id 必须与 pages.json 中 subNVue 页面内的 map id 一致。历史问答中也出现过在 nvue 中调用 mapContext 方法无回调的情况(ISSUE #174930),这可能与页面的生命周期以及数据赋值时机有关。建议提供简化版示例,我们再根据回调信息确认。

关于 regionchange 事件 e.scaleundefined
这实际上是一个已经被反馈过的已知问题。nvue 下 map 组件的 regionchange 事件缺少了和小程序一样的 e.detail.scale 参数,已有多位开发者提过(ISSUE #199152)。目前一个可行的替代方案是,在 regionchange 的 end 阶段调用 mapContext.getScale() 来获取最新的缩放值。若你希望彻底补齐这个事件参数,可以到 issue 系统建议我们推进修复。

关于 joinCluster 为 true 时缩放闪退
这很可能与早期版本中 addMarkers 频繁调用或聚合点过多导致崩溃有关。3.4.6 版本曾修复过“nvue map 组件使用高德地图时频繁调用 addMarkers 增加聚合点可能引起崩溃”的问题(release-archive)。你当前使用的 HBuilderX 5.07 理论上已经包含该修复,但仍有用户反馈在开启聚合后缩放拖拽时闪退(ISSUE #196643)。建议检查一下 markers 数量是否过大,或者是否存在不间断调用 addMarkers 的逻辑。闪退如果必现,请务必提供一个最小复现 demo(含少量 markers 即可),我们可以在新版上进一步验证和修复。

最后还有一个重要的方向性建议:nvue 目前已不再作为主要维护方向,官方更推荐使用 uni-app x(uvue)进行原生地图开发。如果你的项目已到需要考虑长期稳定性的阶段,可以考虑逐步迁移到 uni-app x,其中的 map 组件在 Android/iOS/鸿蒙平台是真正的原生高性能地图,既可以避免层级问题,也能获得更好的聚合和缩放操作稳定性。你可以参考高德地图组件这类基于 uni-app x 的插件来降低迁移成本。

如果你希望我们继续排查当前 nvue 环境下的问题,请务必补充一个最小化的、可独立运行的复现项目(只包含 subNVue 的地图页和少量 markers 数据),并说明是使用自定义基座还是云打包、是否开启了 App 分包等信息。有了这些素材,我们可以更高效地给出确切结论。

内容为 AI 生成,仅供参考
用户3066482

用户3066482 (作者)

补充第3个问题 “使用高德的key在subNvue中标点joinCluster设置为true后缩放几次后应用会闪退”

  • 用户3066482 (作者)

    在customCallout自定义气泡窗口display值设置为ALWAYS时应用缩放几次会闪退,如果不设置customCallout或者display设置为BYCLICK并不会闪退

    2026-05-21 14:37

要回复问题请先登录注册