解決微信小程式真機 showToast 不顯示
阿新 • • 發佈:2022-04-22
今天在真機上測試發現呼叫 showToast
不顯示,或者閃一下就沒了。經過查詢,發現是與 wx.showLoading 衝突了,兩者呼叫的是同個框。
先看下錯誤程式碼:
// 請求事件 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 框隱藏掉了。知道原因後,改起來就容易了。先呼叫 wx.hideLoading(),再呼叫 wx.showToast() 即可。
建議:
若是在網路請求前需要呼叫 wx.showLoading,建議在該 success 和 fail 回撥函式內第一行就呼叫 wx.hideLoading。即使暫時不需要 showToast 操作。因為以後需要在回撥函式內新增 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