vue.js 异步初始化微信JsSDK的问题
问题描述
在我的工程中,
App.vue
容器包含Index.vue
首页组件
我想要在
App.vue
容器中,先初始化微信JsSDK。然后在具体需要定位的组件(比如Index.vue
)中,再通过wx.getPostion()
获取当前地理位置。但容器异步初始化微信的工作未完成,首页组件就开始获取地理位置了,导致获取失败 ,不知道该如何解决?
示例代码
App.vue
/*
* 初始化微信SDK
*/
var jsApiList = ['getLocation']; //js接口
var curUrl = 'http://dev.xxx.com/index.html'; //当前页面地址
var isDebug = false;
console.log('App.vue come in!');
//为了安全起见,微信的appId等配置信息通过后台获取
//所以需要先发异步请求
http.post('/json/GetWxOAuth', {curUrl : curUrl}).then(function(res){
console.log('App.vue GetWxOAuth finish!');
if(res.errorCode == 0){
window.wx.config({
debug: isDebug, //开启调试模式
appId: res.body.appId, // 必填,公众号的唯一标识
timestamp: res.body.timestamp, // 必填,生成签名的时间戳
nonceStr: res.body.nonceStr, // 必填,生成签名的随机串
signature: res.body.signature,// 必填,签名
jsApiList: jsApiList //必填,需要使用的JS接口列表
});
}
});
Index.vue
console.log('Index.vue come in!');
window.wx.ready(function(){
console.info('wx.ready come in!');
window.wx.getLocation({
type: 'wgs84',
success: function (res) {
//do something
},
fail:function(res){
console.error('common wx.getLocation fail!');
reject(res);
}
});
});
最终输出:
App.vue come in! //容器的初始化工作已经开始
Index.vue come in! //但是异步请求还没完成的时候,就已经开始加载首页组件,获取地理位置了
App.vue GetWxOAuth finish! //等过一段时间之后,容器异步的初始化工作才完成
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
给你提一个意见,如果你是想只初始化一次然后全站调用的话这样会有问题
初始化的一些参数在其他页面不会改变,也就是说,你如果有用到sdk来调用分享接口的话
就会发现,每个页面分享的内容都是一样的
微信官方文档也建议SPA单页应用应该在每次切换页面的时候实例化sdk
所以你应该写一个公共方法来封装一下实例化操作,然后可以把ready实例化方法做成一个回调方法
给你个例子
给你个参考,
任意时刻直接调用getPos即可
请问你现在是怎么处理的呢 我也遇到了 这样的问题