今天在真機上測試發現調用?showToast
?不顯示,或者閃一下就沒了。愛掏網 - it200.com經過查找,發現是與 wx.showLoading 沖突了,兩者調用的是同個框。愛掏網 - it200.com
先看下錯誤代碼:
// 請求事件
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()
}
})
}
看這代碼,好像一點問題都沒有,但是hideLoading和showTast調用的是同個框,所以我們走下流程:
首先顯示 loading 框;
然后調用 success / fail,彈框的內容由 loading 變成了 toast;
最后調用 onComplete 時,hideLoading 將彈框隱藏掉了;
很明顯,我們最終把 toast 框隱藏掉了。愛掏網 - it200.com知道原因后,改起來就容易了。愛掏網 - it200.com先調用 wx.hideLoading(),再調用 wx.showToast() 即可。愛掏網 - it200.com
建議:
若是在網絡請求前需要調用 wx.showLoading,建議在該 success 和 fail 回調函數內第一行就調用 wx.hideLoading。愛掏網 - it200.com即使暫時不需要 showToast 操作。愛掏網 - it200.com因為以后需要在回調函數內添加 toast 時, 就不用再管什么順序問題了;
當 toast 和 loading 同時使用,多注意兩者的調用順序;
如下是正確代碼:
// 請求事件
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
})
}
})
}
不要著急劃走!!!還有另外一種情況就是使用了跳轉頁面:
?wx.reLaunch,wx.switchTab,wx.redirectTo,wx.navigateTo使用這三個方法后,showTast還沒來得及顯示,頁面就已經跳轉了,所以我們可以在此加入setTimeOut,妥妥的沒毛病
?
原文鏈接:https://blog.csdn.net/TiaoZhanJi_Xian/article/details/121011868