如何跳出小程序五級頁面的限制
發表時間:2022-9-14
發布人:葵宇科技
瀏覽次數:21
前言:做小程序開發,就要在微信的規則內玩耍。最近做的小程序經常會有個報錯:RangeError: Maximum call stack size exceeded。這意思是說小程序頁面超過5級跳轉了,應該怎么解決呢?
微信小程序官方文檔中,關于頁面的跳轉,有三個API,兩個跳轉新頁面的 API 分別為wx.navigateTo和wx.redirectTo,還有一個 API 名為wx.navigateBack,它用于返回上級頁面。
wx.navigateBack在小程序的初始版本中只能回到上一個頁面,在最新版本(0.10.102800)的更新中給navigateBack添加了一個參數delta,用于決定需要返回幾層頁面。
navigator組件的默認跳轉方式與wx.navigateTo相同,而如果添加redirect屬性,則與wx.redirectTo的跳轉方式相同。
wx.navigateTo在官方文檔中描述如下:
保留當前頁面,跳轉到應用內的某個頁面,使用wx.navigateBack可以返回到原頁面。
通過navigateTo跳轉后,可點擊左上角的按鈕返回上一個頁面。而如果多次調用navigateTo之后,就需要返回多次才能回到初始頁面,這種交互更像是客戶端打開一個新的view。因此,官方在此處有一個限制(最多五級)。
注意:為了不讓用戶在使用小程序時造成困擾,我們規定頁面路徑只能是五層,請盡量避免多層級的交互方式。
不過上述五層的限制只是針對navigateTo,redirectTo則無此限制。因為redirectTo的行為是:
關閉當前頁面,跳轉到應用內的某個頁面。
因此,當頁面個數超過五層時,應該用redirectTo來替換navigateTo,就可以避免Maximum call stack size exceeded的異常,但是redirectTo關閉當前頁面的做法,有些場景并不適用,比如,從列表頁進詳情頁面,如果進入詳情頁面時,關閉列表頁面,再次back時,就沒辦法回到列表頁面。
通過redirectTo跳轉后,只是無法返回跳轉前的頁面,但并不是無法調用navigateBack,而是調用之后,會回到使用redirectTo跳轉前的上一個頁面。
頁面??梢酝ㄟ^getCurrentPages方法獲?。?/p>
getCurrentPages()函數用于獲取當前頁面棧的實例,以數組形式按棧的順序給出,第一個元素為首頁,最后一個元素為當前頁面。
這個方法也比較適用,在多層頁面跳轉中,你可能會用的到。