小程序问题汇总
程序员文章站
2024-03-13 23:35:16
...
问题描述:
微信小程序发送网络请求前,调用wx.showLoading()显示加载中,在回调success和fail中先调用wx.hideLoading()关闭加载提示框,再调用相应业务提示wx.showToast();开发工具中一切正常,真机测试时却一闪而过
原因阐述:
小程序中,showLoading和showToast调用的是同一个提示框,都受 wx.hideToast() 或者 wx.hideLoading() 的影响。
比如在真机上你的代码顺序为 wx.showLoading() =>wx.hideLoading() => wx.showToast() ;但是实际你看到的现象是 wx.showLoading() => wx.showToast() =>wx.hideLoading(),受到最后的 wx.hideLoading() 影响,toast 框闪烁一下就消失
解决方法:
将showToast放到队列最后。即设置settimeout,基本100毫秒就可以了。或者按需判断是否需要showLoading和hideLoading。
setTimeout(function(){
wx.showToast({
title: '操作成功'
})
}, 100)
-
打开分享页面回到首页,首页的callback已经被执行,导致首页空问题
问题描述 + 原因阐述:
因为小程序app.js和首页的js不知道谁先执行问题,所以在app.js中定义了首页的callback,首页只定义,不执行。但是打开分享页面时,已经执行了app.js,并且调用了callback方法,但是此时首页的callback还没有定义(因为首页还未被执行)。从分享页再返回首页,发现首页数据没有渲染上。
解决方法:
app.js中定义全局变量 shareTicket,在onLaunch中获取参数shareTicket并赋值给全局变量shareTicket。在首页中判断全局变量shareTicket是否为true,如果true,就执行callback函数。
app.js:
onLaunch: function (shareTicket) {
console.log('onlaunch app.js================')
if(shareTicket) {
this.globalData.shareTicket = shareTicket;
}
if (that.indexCallback) {
that.indexCallback();
}
}
首页.js:
app.indexCallback = this.indexBack; // 定义回调(在app.js里调用,即在登陆后调用)
if(app.globalData.shareTicket) { // 说明是从分享页面返回首页的
this.indexBack();
}