一恍箭、微信小程序跳轉(zhuǎn)的API
1坑雅、wx.navigateTo(obj)保留當(dāng)前頁面臼婆,跳轉(zhuǎn)到應(yīng)用內(nèi)的某個(gè)頁面
wx.navigateTo({ url: 'test?id=1' })
2隧期、wx.redirectTo(OBJECT)關(guān)閉當(dāng)前頁面,跳轉(zhuǎn)到應(yīng)用內(nèi)的某個(gè)頁面南缓。
wx.redirectTo({ url: 'test?id=1' })
3胸遇、wx.navigateBack(OBJECT)關(guān)閉當(dāng)前頁面,返回上一頁面或多級(jí)頁面
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)的某個(gè)頁面。
wx.reLaunch({ url: 'test?id=1' })
二峰搪、出現(xiàn)不能跳轉(zhuǎn)的情況岔冀,可能有這是三種
要跳轉(zhuǎn)的路徑是不是在app.js里注冊(cè)過,或者路徑寫錯(cuò)了
要跳轉(zhuǎn)的路徑是否位于TabBar中,如果是的話概耻,要使用wx.switchTab 來跳轉(zhuǎn)界面
頁面路徑最多只能是10層使套,即是頁面棧中的元素不能超過10個(gè),
三鞠柄、舉例說明
現(xiàn)有A侦高、B、C厌杜、D四個(gè)頁面奉呛。A為最先打開的頁面计螺,小程序啟動(dòng)后,在A頁面中通過navigateTo跳轉(zhuǎn)到B頁面瞧壮,然后在B頁面再通過navigateTo跳轉(zhuǎn)到C頁面登馒。此時(shí)頁面棧中包含三個(gè)元素,分別為A咆槽、B陈轿、C三個(gè)頁面
現(xiàn)在再通過redirectTo跳轉(zhuǎn)到D頁面,redirectTo會(huì)將當(dāng)前頁面出棧秦忿,即將C頁面出棧济欢,再將D頁面入棧這時(shí)頁面棧中的元素則變?yōu)锳、B小渊、D
此時(shí)如果在 D 頁面調(diào)用 navigateBack法褥,會(huì)發(fā)現(xiàn)不是返回 C 頁面,而是返回到了 B 頁面酬屉。因?yàn)?navigateBack 將棧中最后一個(gè)元素(D 頁面)出棧后半等,頁面棧的內(nèi)容則變?yōu)?A、B呐萨。頁面棧最后一個(gè)元素為 B 頁面杀饵,即當(dāng)前顯示的會(huì)是 B 頁面。
綜上所述「頁面路徑」限制為十層谬擦,其實(shí)就是規(guī)定了頁面棧中的元素不能超過十個(gè)切距。頁面棧中元素達(dá)到十個(gè)后,就不能增加了惨远。
navigateTo 不會(huì)將舊頁面出棧谜悟,因此通過 navigateTo 跳轉(zhuǎn)后,頁面棧中元素個(gè)數(shù)會(huì)加一北秽,因此在頁面棧中元素個(gè)數(shù)達(dá)到 10之后再調(diào)用 navigateTo 會(huì)失敗葡幸,出現(xiàn)無法跳轉(zhuǎn)的錯(cuò)誤。
而 redirectTo 會(huì)在將舊頁面出棧后贺氓,再將新頁面入棧蔚叨,因此通過 redirectTo 跳轉(zhuǎn),頁面棧中元素個(gè)數(shù)會(huì)保持不變辙培,因此即使在頁面棧中元素達(dá)到 5 個(gè)之后再調(diào)用 redirectTo 也能成功跳轉(zhuǎn)蔑水。
四、總結(jié)
小程序上線以后就發(fā)現(xiàn)了這個(gè)問題扬蕊,點(diǎn)擊按鈕沒有反應(yīng)搀别,頁面跳轉(zhuǎn)不了,看了代碼沒有什么問題厨相,猜測原因可能就是頁面棧中的元素達(dá)到了上限领曼,然后就開始根據(jù)猜測操作鸥鹉,發(fā)現(xiàn)一直從文章列表進(jìn)到文章詳情,在點(diǎn)擊重新編輯在保存庶骄,保存成功之后跳轉(zhuǎn)到文章列表毁渗。但是上個(gè)文章列表并沒有出棧。就這個(gè)一直重新編輯保存就會(huì)一直往頁面棧里放元素单刁,直到在點(diǎn)擊跳轉(zhuǎn)頁面失效灸异。
我是在重新編輯完點(diǎn)擊保存之后用wx.navigateBack({delta: 2})
寫完這篇文章發(fā)現(xiàn)好像沒有判斷新建的時(shí)候也讓返回了2,直接返回到了首頁羔飞。