微信小程序 --- 使用wx.redirectTo(OBJECT)跳轉頁面安卓返回按鈕異常問題(監聽安卓返回鍵操作,監聽小程序左上角返回按鈕)

先看看官方文檔對wx.navigateBack的使用解釋

wx.navigateBack(OBJECT)

關閉當前頁面,返回上一頁面或多級頁面。可通過 getCurrentPages() 獲取當前的頁面棧,決定需要返回幾層。
OBJECT 參數說明:
參數 類型 默認值 說明
delta Number 1 返回的頁面數,如果 delta 大於現有頁面數,則返回到首頁。

wx.redirectTo(OBJECT)

wx.redirectTo(OBJECT) 關閉當前頁面,跳轉到應用內的某個頁面。

wx.navigateTo(OBJECT)

保留當前頁面,跳轉到應用內的某個頁面,使用wx.navigateBack可以返回到原頁面。

那麼問題是,官方左上角返回按鈕,和安卓返回按鈕&&IOS左滑,或者說是頂部區域自定義自己寫返回按鈕,那通通都是返回上一級,當然自定義返回的按鈕你可以利用wx.navigateBack返回更多的頁面層級,但你是無法控制比方安卓返回鍵的操作的,它默認就是返回一級,那要怎麼解決系統自帶返回按鈕默認只返回上一級的問題?請往下看:

如何自定義頂部區域?點這裏
這裏寫圖片描述

首先第一個,剛纔一直說返回上一級上一級的,返回的是什麼?沒錯!是頁面。那麼是否可以從頁面上面下手找到解決方案?答案是可以的,就是頁面的生命週期,先看看都有什麼
這裏寫圖片描述

頁面進來的時候 都會加載onLoad,onShow,onReady,剩下的兩個onHide,onUnload是在頁面隱藏和頁面卸載的時候加載,這兩個是有區別的,onHide是指頁面仍然存留在頁面棧中,而onUnload已經在頁面棧移除掉了,完全不存在,頁面棧是在什麼時候存進來的? 一般默認都是使用wx.navigateTo(OBJECT),因爲返回的時候要返回上一級所以需要保留頁面,這個時候也是將頁面路徑存進頁面棧的時候,而使用wx.navigateBack移除一級或者多級頁面的時候,跳進指定路徑會生成一個新的路徑存進去頁面棧中,所以就會出現返回鍵只返回一層的時候,頁面出現要返回兩次才能返回目標頁面上一層的情況,而onUnload在每次頁面跳轉到另一個頁面的時候都會觸發這時候就可以利用它去判斷,安卓返回鍵是否有按下進行返回上一級操作的條件了,因爲你不可能說每次按都這樣,因爲頁面需求關係,可能有多種條件觸發,所以你還需要一個東西,就是根據頁面棧的數量去判斷,利用getCurrentPages()就可以得到頁面棧的數量,示例代碼如下:

  /**
   * 生命週期函數--監聽頁面卸載
   */
  onUnload: function () {
    if (getCurrentPages().length == 3) {
      wx.navigateBack({
        delta: 1
      })
    }
  },

以上就是本文全部內容,希望幫助到你

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章