花了一周多,終于把公司小程序做出來了。真機上測試發(fā)現(xiàn)調(diào)用 showToast 不顯示,或者閃一下就沒了。經(jīng)過查找,發(fā)現(xiàn)是與 wx.showLoading 沖突了,兩者調(diào)用的是同個框。
先放上我的錯誤代碼:
// 請求事件
requestEvent: function() {
wx.showLoading({
title: '正在加載中',
})
wx.request({
url: '',
success: function(res) {
wx.showToast({
title: '成功',
duration: 2000
})
},
fail: function() {
wx.showToast({
title: '失敗',
duration: 2000
})
},
complete: function() {
wx.hideLoading()
}
})
}
我是想請求接口后,將加載框隱藏掉,再顯示 toast 提示。但是真機上發(fā)現(xiàn) showToast 不顯示。正如上面所說,兩者調(diào)用的是同個框。現(xiàn)在,我們分析整個流程:
- 首先顯示 loading 框;
- 然后調(diào)用 success / fail,彈框的內(nèi)容由 loading 變成了 toast;
- 最后調(diào)用 onComplete 時,hideLoading 將彈框隱藏掉了;
很明顯,我們最終把 toast 框隱藏掉了。知道原因后,改起來就容易了。先調(diào)用 wx.hideLoading(),再調(diào)用 wx.showToast() 即可。
建議:
- 若是在網(wǎng)絡(luò)請求前需要調(diào)用
wx.showLoading,建議在該 success 和 fail 回調(diào)函數(shù)內(nèi)第一行就調(diào)用wx.hideLoading。即使暫時不需要showToast操作。因為以后需要在回調(diào)函數(shù)內(nèi)添加 toast 時, 就不用再管什么順序問題了; - 當(dāng) toast 和 loading 同時使用,多注意兩者的調(diào)用順序;
如下是正確代碼:
// 請求事件
requestEvent: function() {
wx.showLoading({
title: '正在加載中',
})
wx.request({
url: '',
success: function(res) {
wx.hideLoading()
wx.showToast({
title: '成功',
duration: 2000
})
},
fail: function() {
wx.hideLoading()
wx.showToast({
title: '失敗',
duration: 2000
})
}
})
}