1. 程式人生 > 其它 >解決微信小程式真機 showToast 不顯示

解決微信小程式真機 showToast 不顯示

今天在真機上測試發現呼叫 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