uni-app地图在subnvue页面使用方法不生效

uni-app地图在subnvue页面使用方法不生效

测试过的手机:

红米note3,苹果8plus

操作步骤:

  • 将nvue挂载在vue的子窗体下地图方法失效

预期结果:

mapContext.addMarkers({  
    markers,  
    clear: false,  
    complete(res) {  
        console.log('addMarkers', res)  
    },  
    fail(err) {  
        console.error(err)  
    }  
})
  • addMarkers方法生效,地图标注可以动态添加

实际结果:

  • addMarkers方法不生效,地图标注不可以动态添加

bug描述:

nvue页面使用subnvue方式展现,但是地图的方法不生效

this._mapContext = uni.createMapContext("map", this);  

// 仅调用初始化,才会触发 on.("markerClusterCreate", (e) => {})    
this._mapContext.initMarkerCluster({  
    enableDefaultStyle: false,  
    zoomOnClick: true,  
    gridSize: 60,  
    complete(res) {  
        console.log('initMarkerCluster', res)  
    }  
});  

this._mapContext.on("markerClusterCreate", (e) => {  
    console.log("markerClusterCreate", e);  
});  

{  
    "path": "pages/sys/indexMap/index",  
    "style": {  
        "navigationBarTitleText": "首页",  
        "navigationStyle": "custom" ,// 隐藏系统导航栏  
        "enablePullDownRefresh":true,  
        "app-plus": {  
            "titleNView": false, //禁用原生导航栏  
            "subNVues": [  
                { //地图  
                    "id": "map", //subNVue 的 id,可通过 uni.getSubNVueById('drawer') 获取  
                    "path": "pages/sys/indexMap/subNVue/map", // nvue 路径  
                    // "type": "popup",  
                    "style": { //webview style 子集,文档可暂时开放出来位置,大小相关配置  
                        "position": "static",  
                        "bottom":"0",  
                        "right":"0",  
                        "dock":"top",  
                        "width": "100%",  
                        "height": "100%",  
                        "background": "transparent",  
                        "zindex":-1  
                    }  
                }  
            ]  
        }  
    }  
}
  • 放在vue页面或者不是挂载在vue子窗体下是生效的

更多关于uni-app地图在subnvue页面使用方法不生效的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

请提供简单可复现的完整示例(上传附件),方便我们快速排查问题哦。 【bug优先处理规则】https://ask.dcloud.net.cn/article/38139

更多关于uni-app地图在subnvue页面使用方法不生效的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在 uni-app 中使用 subNVue 页面时,地图组件(如 map)可能会出现不生效的情况。这通常是由于 subNVue 页面的渲染机制与普通页面的渲染机制不同所导致的。以下是一些可能的原因和解决方法:

1. 确保 subNVue 页面配置正确

在 pages.json 中,确保 subNVue 页面的配置正确。例如:

{
  "pages": [
    {
      "path": "pages/index/index",
      "style": {
        "subNVue": {
          "path": "pages/subnvue/map",
          "style": {
            "position": "absolute",
            "width": "100%",
            "height": "100%",
            "background": "transparent"
          }
        }
      }
    }
  ]
}

2. 确保地图组件在 subNVue 页面中正确使用

在 subNVue 页面中,确保地图组件的使用方式正确。例如:

<template>
  <view>
    <map
      id="map"
      :latitude="latitude"
      :longitude="longitude"
      :markers="markers"
      style="width: 100%; height: 100%;"
    ></map>
  </view>
</template>

<script>
export default {
  data() {
    return {
      latitude: 39.909,
      longitude: 116.39742,
      markers: [
        {
          id: 1,
          latitude: 39.909,
          longitude: 116.39742,
          name: '北京'
        }
      ]
    };
  }
};
</script>

3. 检查 subNVue 页面的生命周期

subNVue 页面的生命周期与普通页面有所不同,确保在 subNVue 页面的 onLoad 或 onReady 生命周期中初始化地图组件。

4. 检查 subNVue 页面的样式

确保 subNVue 页面的样式设置正确,特别是 width 和 height,以确保地图组件能够正确显示。

5. 使用 nvue 页面代替 subNVue

如果 subNVue 页面中的地图组件仍然无法正常工作,可以尝试使用 nvue 页面代替 subNVue 页面。nvue 页面使用原生渲染,可能对地图组件的支持更好。

6. 检查 uni-app 版本

确保使用的 uni-app 版本是最新的,因为旧版本可能存在一些已知的 bug 或问题。

7. 使用原生地图组件

如果以上方法都无法解决问题,可以考虑使用原生地图组件(如高德地图或百度地图的 SDK)来实现地图功能。

8. 调试和日志

在开发过程中,使用 console.log 或 uni.showToast 等方法输出调试信息,检查是否有错误或异常信息。

示例代码

以下是一个简单的 subNVue 页面中使用地图组件的示例:

<template>
  <view>
    <map
      id="map"
      :latitude="latitude"
      :longitude="longitude"
      :markers="markers"
      style="width: 100%; height: 100%;"
    ></map>
  </view>
</template>

<script>
export default {
  data() {
    return {
      latitude: 39.909,
      longitude: 116.39742,
      markers: [
        {
          id: 1,
          latitude: 39.909,
          longitude: 116.39742,
          name: '北京'
        }
      ]
    };
  },
  onLoad() {
    console.log('subNVue map page loaded');
  }
};
</script>
回到顶部