uni-app subnvue 中 map 的方法 getRegion getCenterLocation 等不启作用

uni-app subnvue 中 map 的方法 getRegion getCenterLocation 等不启作用

信息类别 详情
产品分类 uniapp/App
PC开发环境 Windows
PC版本号 WIN10 LTSC
HBuilderX 正式
HBuilderX版本号 3.99
手机系统 Android
手机版本号 Android 12
手机厂商 华为
手机机型 mate40
页面类型 nvue
Vue版本 vue3
打包方式 离线
项目创建方式 HBuilderX

示例代码:

this.mapContext = uni.createMapContext("map", this);
this.mapContext.getCenterLocation({
type: 'gcj02',
success: (res) => {
uni.showModal({
title: '位置信息',
content: (res.longitude).toFixed(2) + '/' + (res.latitude).toFixed(2)
});
console.log(res);
let address = {
latitude: res.latitude,
longitude: res.longitude
}
this.markers[0].longitude = address.longitude;
this.markers[0].latitude = address.latitude;
console.log("地址")
console.log(address)
this.$emit('longLatDetail', address)
},
fail: (err) => {
console.log(this.latitude)
console.log('获取当前地图中心的经纬度2', err);
}
})

操作步骤:

this.mapContext.getCenterLocation({
type: 'gcj02',
success: (res) => {
以下都不执行

预期结果:

预期结果是能出来res的值

实际结果:

res没任何值,并且没有触发

bug描述:

uniapp subnvue 中是用map的方法 getRegion getCenterLocation等方法不启作用


更多关于uni-app subnvue 中 map 的方法 getRegion getCenterLocation 等不启作用的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

父级和子级都用nvue就解决这个问题了

更多关于uni-app subnvue 中 map 的方法 getRegion getCenterLocation 等不启作用的实战教程也可以访问 https://www.itying.com/category-93-b0.html


uni-app 中使用 subNVue 时,调用 map 组件的方法如 getRegiongetCenterLocation 等不起作用,可能是由于以下几个原因:

1. subNVue 的生命周期问题

subNVue 是一个独立的原生子窗口,它的生命周期与主页面是独立的。如果你在主页面加载时立即调用 map 的方法,可能会导致 map 组件尚未完全加载或初始化完成。

解决方案:确保在 map 组件完全加载后再调用这些方法。可以通过监听 map 组件的 loaded 事件来确认组件是否已经加载完成。

<map id="myMap" [@loaded](/user/loaded)="onMapLoaded"></map>

methods: {
  onMapLoaded() {
    const mapContext = uni.createMapContext('myMap', this);
    mapContext.getCenterLocation({
      success: (res) => {
        console.log('中心点坐标:', res.latitude, res.longitude);
      },
      fail: (err) => {
        console.error('获取中心点失败:', err);
      }
    });
  }
}

2. subNVue 的上下文问题

subNVue 是一个独立的原生窗口,它的上下文与主页面不同。如果你在主页面中调用 map 的方法,可能会导致方法无法正确执行。

解决方案:确保你在 subNVue 的上下文中调用 map 的方法。可以通过在 subNVue 的页面中定义方法来调用 map 的 API。

// subNVue 页面中的代码
const mapContext = uni.createMapContext('myMap', this);
mapContext.getCenterLocation({
  success: (res) => {
    console.log('中心点坐标:', res.latitude, res.longitude);
  },
  fail: (err) => {
    console.error('获取中心点失败:', err);
  }
});

3. map 组件的 ID 问题

确保你传递给 createMapContextmap 组件 ID 是正确的,并且在页面中存在。

解决方案:检查 map 组件的 id 属性是否与 createMapContext 中使用的 ID 一致。

<map id="myMap"></map>
const mapContext = uni.createMapContext('myMap', this);

4. subNVue 的兼容性问题

某些 map 组件的方法可能在 subNVue 中不完全兼容,或者需要特定的配置。

解决方案:查阅 uni-app 官方文档,确认 map 组件在 subNVue 中的支持情况。如果某些方法确实不支持,可以考虑使用其他方式实现相同的功能。

5. 异步调用问题

map 组件的某些方法可能需要异步调用,或者需要在特定的时机调用。

解决方案:确保在正确的时机调用这些方法,例如在 map 组件的 loaded 事件触发后再调用。

<map id="myMap" [@loaded](/user/loaded)="onMapLoaded"></map>

methods: {
  onMapLoaded() {
    const mapContext = uni.createMapContext('myMap', this);
    mapContext.getRegion({
      success: (res) => {
        console.log('地图区域:', res);
      },
      fail: (err) => {
        console.error('获取地图区域失败:', err);
      }
    });
  }
}
回到顶部