一、微信小程序跳轉(zhuǎn)的API
1、wx.navigateTo(obj)保留當(dāng)前頁面,跳轉(zhuǎn)到應(yīng)用內(nèi)的某個頁面
wx.navigateTo({ url: 'test?id=1' })
2、wx.redirectTo(OBJECT)關(guān)閉當(dāng)前頁面,跳轉(zhuǎn)到應(yīng)用內(nèi)的某個頁面。
wx.redirectTo({ url: 'test?id=1' })
3、wx.navigateBack(OBJECT)關(guān)閉當(dāng)前頁面,返回上一頁面或多級頁面
wx.navigateBack({ delta: 2 })
4、wx.switchTab(OBJECT)跳轉(zhuǎn)到 tabBar 頁面,并關(guān)閉其他所有非 tabBar 頁面
wx.switchTab({ url: '/index' })
5、wx.reLaunch(OBJECT)關(guān)閉所有頁面,打開到應(yīng)用內(nèi)的某個頁面。
wx.reLaunch({ url: 'test?id=1' })
二、出現(xiàn)不能跳轉(zhuǎn)的情況,可能有這是三種
要跳轉(zhuǎn)的路徑是不是在app.js里注冊過,或者路徑寫錯了
要跳轉(zhuǎn)的路徑是否位于TabBar中,如果是的話,要使用wx.switchTab 來跳轉(zhuǎn)界面
頁面路徑最多只能是10層,即是頁面棧中的元素不能超過10個,
三、舉例說明
現(xiàn)有A、B、C、D四個頁面。A為最先打開的頁面,小程序啟動后,在A頁面中通過navigateTo跳轉(zhuǎn)到B頁面,然后在B頁面再通過navigateTo跳轉(zhuǎn)到C頁面。此時頁面棧中包含三個元素,分別為A、B、C三個頁面
現(xiàn)在再通過redirectTo跳轉(zhuǎn)到D頁面,redirectTo會將當(dāng)前頁面出棧,即將C頁面出棧,再將D頁面入棧這時頁面棧中的元素則變?yōu)锳、B、D
此時如果在 D 頁面調(diào)用 navigateBack,會發(fā)現(xiàn)不是返回 C 頁面,而是返回到了 B 頁面。因為 navigateBack 將棧中最后一個元素(D 頁面)出棧后,頁面棧的內(nèi)容則變?yōu)?A、B。頁面棧最后一個元素為 B 頁面,即當(dāng)前顯示的會是 B 頁面。
綜上所述「頁面路徑」限制為十層,其實就是規(guī)定了頁面棧中的元素不能超過十個。頁面棧中元素達到十個后,就不能增加了。
navigateTo 不會將舊頁面出棧,因此通過 navigateTo 跳轉(zhuǎn)后,頁面棧中元素個數(shù)會加一,因此在頁面棧中元素個數(shù)達到 10之后再調(diào)用 navigateTo 會失敗,出現(xiàn)無法跳轉(zhuǎn)的錯誤。
而 redirectTo 會在將舊頁面出棧后,再將新頁面入棧,因此通過 redirectTo 跳轉(zhuǎn),頁面棧中元素個數(shù)會保持不變,因此即使在頁面棧中元素達到 5 個之后再調(diào)用 redirectTo 也能成功跳轉(zhuǎn)。
四、總結(jié)
小程序上線以后就發(fā)現(xiàn)了這個問題,點擊按鈕沒有反應(yīng),頁面跳轉(zhuǎn)不了,看了代碼沒有什么問題,猜測原因可能就是頁面棧中的元素達到了上限,然后就開始根據(jù)猜測操作,發(fā)現(xiàn)一直從文章列表進到文章詳情,在點擊重新編輯在保存,保存成功之后跳轉(zhuǎn)到文章列表。但是上個文章列表并沒有出棧。就這個一直重新編輯保存就會一直往頁面棧里放元素,直到在點擊跳轉(zhuǎn)頁面失效。
我是在重新編輯完點擊保存之后用wx.navigateBack({delta: 2})
寫完這篇文章發(fā)現(xiàn)好像沒有判斷新建的時候也讓返回了2,直接返回到了首頁。