第七節(jié):頁(yè)面路由(頁(yè)面跳轉(zhuǎn))

在小程序中所有頁(yè)面的路由全部由框架進(jìn)行管理。
一:頁(yè)面棧
? ??框架以棧的形式維護(hù)了當(dāng)前的所有頁(yè)面。 當(dāng)發(fā)生路由切換的時(shí)候,頁(yè)面棧的表現(xiàn)如下:
? ??????路由方式? ? ? ? ? 頁(yè)面棧表現(xiàn)
? ??????初始化? ? ? ? ? ? ? 新頁(yè)面入棧
????????打開新頁(yè)? ? ? ? ? 面新頁(yè)面入棧
????????頁(yè)面重定向? ? ? 當(dāng)前頁(yè)面出棧,新頁(yè)面入棧
????????頁(yè)面返回? ? ? ? ? 頁(yè)面不斷出棧,直到目標(biāo)返回頁(yè),新頁(yè)面入棧
????????Tab 切換? ? ? ? ? ?頁(yè)面全部出棧,只留下新的 Tab 頁(yè)面
????????重加載? ? ? ? ? ? ? 頁(yè)面全部出棧,只留下新的頁(yè)面
? ? 頁(yè)面棧使用:getCurrentPages()
? ? 1.getCurrentPages() 函數(shù)用于獲取當(dāng)前頁(yè)面棧的實(shí)例,以數(shù)組形式按棧的順序給出,
????????第一個(gè)元素為首頁(yè),最后一個(gè)元素為當(dāng)前頁(yè)面。
? ? 2.Tip:不要嘗試修改頁(yè)面棧,會(huì)導(dǎo)致路由以及頁(yè)面狀態(tài)錯(cuò)誤。
二:路由方式
? ??對(duì)于路由的觸發(fā)方式以及頁(yè)面生命周期函數(shù)如下:
? ??????路由方式? ? ? ? ?觸發(fā)時(shí)機(jī)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?路由前頁(yè)面? ? ? ? ? ? ? 路由后頁(yè)面
? ??????初始化? ? ? ? ? ? ?小程序打開的第一個(gè)頁(yè)面? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?onLoad, onShow
????????打開新頁(yè)面? ? ?調(diào)用 API wx.navigateTo 或使用組件? ? ? ? ? ?onHide? ? ? ? ? ? ? ? ? ? onLoad, onShow
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <navigator open-type="navigateTo"/>?
????????頁(yè)面重定向? ? ?調(diào)用 API wx.redirectTo 或使用組件? ? ? ? ? ? ?onUnload? ? ? ? ? ? ? ?onLoad, onShow
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <navigator open-type="redirectTo"/>?
????????頁(yè)面返回? ? ? ? ?調(diào)用 API wx.navigateBack 或使用組件? ? ? ??onUnload? ? ? ? ? ? ? ?onShow
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <navigator open-type="navigateBack">
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 或用戶按左上角返回按鈕??
????????Tab 切換? ? ? ? ?調(diào)用 API wx.switchTab 或使用組件? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?各種情況參考下表
????????????????????????????????<navigator open-type="switchTab"/>
????????????????????????????????或用戶切換 Tab???? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
????????重啟動(dòng)? ? ? ? ? ? 調(diào)用 API wx.reLaunch 或使用組件
????????????????????????????????<navigator open-type="reLaunch"/>? ? ? ? ? ? onUnload? ? ? ? ? ? ?onLoad, onShow
? ? 對(duì)于上表中的Tab切換的各種情況
????對(duì)應(yīng)的生命周期(理解環(huán)境為底部的tabBar操作哦)
(以 A、B 頁(yè)面為 Tabbar 頁(yè)面,C 是從 A 頁(yè)面打開的頁(yè)面,D 頁(yè)面是從 C 頁(yè)面打開的頁(yè)面為例)
????當(dāng)前頁(yè)面? ? ? ? ? ? ? ? ? 路由后頁(yè)面? ? ? ? ? ? ? ? ? ? ? ?觸發(fā)的生命周期(按順序)????
????A? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Nothing happend
????A? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? B? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?A.onHide(), B.onLoad(), B.onShow()
????A? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? B(再次打開)? ? ? ? ? ? ? ? A.onHide(), B.onShow()
????C? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C.onUnload(), A.onShow()
????C? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? B? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C.onUnload(), B.onLoad(), B.onShow()
????D? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? B? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?D.onUnload(), C.onUnload(), B.onLoad(), B.onShow()
????D(從轉(zhuǎn)發(fā)進(jìn)入)? ?A? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?D.onUnload(), A.onLoad(), A.onShow()
????D(從轉(zhuǎn)發(fā)進(jìn)入)? ?B? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?D.onUnload(), B.onLoad(), B.onShow()
注意:
? ? 1.navigateTo, redirectTo 只能打開非 tabBar 頁(yè)面,url頁(yè)面路徑只能使用相對(duì)路徑。。
? ? 2.switchTab 只能打開 tabBar 頁(yè)面
? ? 3.reLaunch 可以打開任意頁(yè)面。
? ? 4.頁(yè)面底部的 tabBar 由頁(yè)面決定,即只要是定義為 tabBar 的頁(yè)面,底部都有 tabBar。
? ? 5.調(diào)用頁(yè)面路由帶的參數(shù)可以在目標(biāo)頁(yè)面的onLoad中獲取。
? ? 6.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容