- 需求的场景描述(希望解决的问题)
小程序需求一个定位然后使用了wx.getLocation 但是现在发现这样一个问题:
当向用户申请定位授权时 手机没有开通定位权限 所以我使用这个按钮申请用户授权
当用户授权或者没有授权只能从左上角返回 如图返回后执行onshow() 所以我在onshow中写 导致了onloan的执行两次 (定位需要第一时间执行)
- 希望提供的能力
有没有什么办法让onload执行一次
框架类型 | 问题类型 | API/组件名称 | 终端类型 | 微信版本 | 基础库版本 |
---|---|---|---|---|---|
小程序 | 需求 | wx.getLocation | 工具 | 6.7 | 2.2.3 |
4 个回答
你可以把获取地理位置的函数封装成一个自己的函数,分别在onLoad和onShow里面调用,为什么要调用onLoad呢...
onLoad确定只执行一次。但是你在onShow里面有调用了this.onLoad,导致了onLoad执行了两次好不,你把那个获取地理位置的代码放onShow不行吗
我将获取定位函数放在onload里 定位没有权限显示mask去申请用户授权 放在onshow里不会第一时间获取定位信息
你的意思是我需要在onshow写一遍onload同样代码吗?
如果用户允许 或者 拒绝后 你可以使用 这是是否获得了允许保存图片的,你尝试下是否允许授权地址的 就好了
这个我试了 判断成功与否 依然需要调用onload方法 以为之前用户禁用了定位授权功能
不用的 我们 这边 这样操作后 用户点击去设置后 如果取消 或者返回 再点击 都会正常进行下一步操作
我定位函数放在onload里 如果定位没有权限会触发
wx.getLocation fail方法 我在fail方法里显示mask去申请用户授权
请问我应该把这个判断写在onshow里吗
你去打开授权设置页面的时候,不是触发的open-type=‘opensetting’按钮吗,这个按钮有个回调函数,在这个回调函数里面判断一下用户是否打开了授权,若打开了再调用一下wx.getLocation接口获取数据就可以了。
OK 谢谢啦 虽然没找到回调函数 但是有了一个新思路
是加上页面加载onload一共两次,还是进入onshow之后调用this.onload执行了两次
加上onshow 2次 onload一次 返回调用onshow一次
那肯定啊,,第一次是页面生命周期必须的,,第二次你调用的onload