uni-app uni.chooseLocation 方法报错导致无法搜索地址
uni-app uni.chooseLocation 方法报错导致无法搜索地址
| 项目属性 | 值 |
|---|---|
| 产品分类 | uniapp/App |
| PC开发环境操作系统 | Windows |
| PC开发环境操作系统版本号 | windows11 |
| HBuilderX类型 | 正式 |
| HBuilderX版本号 | 4.76 |
| 手机系统 | Android |
| 手机系统版本号 | Android 10 |
| 手机厂商 | 华为 |
| 手机机型 | 荣耀30pro |
| 页面类型 | nvue |
| vue版本 | vue2 |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
示例代码:
uni.chooseLocation({
success: (res) => {
this.startLocation.startAddress = res.address
this.startLocation.lat = res.latitude
this.startLocation.lng = res.longitude
}
})
操作步骤:
<template>
<view>
<button @click="open">打开地点选择</button>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
open(){
uni.chooseLocation({
complete(res) {
console.log(res);
}
})
}
}
}
</script>
<style>
</style>
在该页面,点击“打开地点选择”按钮,正常打开了地图选择地址组件,定位到当前页面,但是地址列表无数据。
预期结果:
页面显示地址列表数据可选择。
实际结果:
无显示,有报错。
bug描述:
uni.chooseLocation 调用该方法后,控制台输出
20:09:15.824 [JS Framework] Failed to execute the callback function:
TypeError: Cannot read property 'pageIndex' of null
20:09:15.824 reportJSException >>>> exception function:<strong>WEEX_CALL_JAVASCRIPT</strong>, exception:JavaScript execute error!Uncaught TypeError: Cannot read property 'pageIndex' of null
at (/__uniappchooselocation.js.nvue:1:25432)
导致输入地址搜索地址时,无地址列表可选择。
更多关于uni-app uni.chooseLocation 方法报错导致无法搜索地址的实战教程也可以访问 https://www.itying.com/category-93-b0.html
4 回复
升一下,HBuilderX4.81alpha,如果还有问题,提供一个复现工程。
更多关于uni-app uni.chooseLocation 方法报错导致无法搜索地址的实战教程也可以访问 https://www.itying.com/category-93-b0.html
升级到HBuilderX4.81alpha 还是一样的错误,复现工程已上传
回复 h***@163.com: 我补充了两个相关链接,这个可能是配置 key 的问题,按照评论区反馈进行排查
这是一个典型的 uni.chooseLocation 在 nvue 页面中的兼容性问题。从错误信息 Cannot read property 'pageIndex' of null 可以看出,这是 nvue 环境下调用该 API 时内部对象初始化失败导致的。
问题分析:
uni.chooseLocation在 nvue 页面中可能存在兼容性问题- 错误发生在内部页面索引参数读取时,表明底层组件初始化异常
- 虽然地图组件能正常打开,但地址搜索功能因对象未正确初始化而失效
解决方案:
方案一:使用条件编译处理 nvue 兼容性
// #ifdef APP-NVUE
// nvue 页面使用其他定位方案
uni.getLocation({
type: 'gcj02',
success: (res) => {
// 获取坐标后跳转到地图页面或使用其他地址选择方案
}
})
// #endif
// #ifndef APP-NVUE
// vue 页面正常使用 chooseLocation
uni.chooseLocation({
success: (res) => {
this.startLocation.startAddress = res.address
this.startLocation.lat = res.latitude
this.startLocation.lng = res.longitude
}
})
// #endif

