轉至: https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/route.html
頁面路由
在小程序中所有頁面的路由全部由框架進行管理。
頁面棧
框架以棧的形式維護了當前的所有頁面。 當發生路由切換的時候,頁面棧的表現如下:
路由方式 | 頁面棧表現 |
---|---|
初始化 | 新頁面入棧 |
打開新頁面 | 新頁面入棧 |
頁面重定向 | 當前頁面出棧,新頁面入棧 |
頁面返回 | 頁面不斷出棧,直到目標返回頁 |
Tab 切換 | 頁面全部出棧,只留下新的 Tab 頁面 |
重加載 | 頁面全部出棧,只留下新的頁面 |
開發者可以使用 getCurrentPages()
函數獲取當前頁面棧。
路由方式
對於路由的觸發方式以及頁面生命週期函數如下:
路由方式 | 觸發時機 | 路由前頁面 | 路由後頁面 |
---|---|---|---|
初始化 | 小程序打開的第一個頁面 | onLoad, onShow | |
打開新頁面 | 調用 API wx.navigateTo 使用組件 <navigator open-type="navigateTo"/> |
onHide | onLoad, onShow |
頁面重定向 | 調用 API wx.redirectTo 使用組件 <navigator open-type="redirectTo"/> |
onUnload | onLoad, onShow |
頁面返回 | 調用 API wx.navigateBack 使用組件 <navigator open-type="navigateBack"> 用戶按左上角返回按鈕 |
onUnload | onShow |
Tab 切換 | 調用 API wx.switchTab 使用組件 <navigator open-type="switchTab"/> 用戶切換 Tab |
各種情況請參考下表 | |
重啓動 | 調用 API wx.reLaunch 使用組件 <navigator open-type="reLaunch"/> |
onUnload | onLoad, onShow |
Tab 切換對應的生命週期(以 A、B 頁面爲 Tabbar 頁面,C 是從 A 頁面打開的頁面,D 頁面是從 C 頁面打開的頁面爲例):
當前頁面 | 路由後頁面 | 觸發的生命週期(按順序) |
---|---|---|
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(從轉發進入) | A | D.onUnload(), A.onLoad(), A.onShow() |
D(從轉發進入) | B | D.onUnload(), B.onLoad(), B.onShow() |
Tips:
navigateTo
,redirectTo
只能打開非 tabBar 頁面。switchTab
只能打開 tabBar 頁面。reLaunch
可以打開任意頁面。- 頁面底部的 tabBar 由頁面決定,即只要是定義爲 tabBar 的頁面,底部都有 tabBar。
- 調用頁面路由帶的參數可以在目標頁面的
onLoad
中獲取。
生命週期
下圖說明了頁面 Page
實例的生命週期。
Page(Object object)
註冊小程序中的一個頁面。接受一個 Object
類型參數,其指定頁面的初始數據、生命週期回調、事件處理函數等。
參數
Object object
屬性 | 類型 | 默認值 | 必填 | 說明 |
---|---|---|---|---|
data | Object | 頁面的初始數據 | ||
onLoad | function | 生命週期回調—監聽頁面加載 | ||
onShow | function | 生命週期回調—監聽頁面顯示 | ||
onReady | function | 生命週期回調—監聽頁面初次渲染完成 | ||
onHide | function | 生命週期回調—監聽頁面隱藏 | ||
onUnload | function | 生命週期回調—監聽頁面卸載 | ||
onPullDownRefresh | function | 監聽用戶下拉動作 | ||
onReachBottom | function | 頁面上拉觸底事件的處理函數 | ||
onShareAppMessage | function | 用戶點擊右上角轉發 | ||
onAddToFavorites | function | 用戶點擊右上角收藏 | ||
onPageScroll | function | 頁面滾動觸發事件的處理函數 | ||
onResize | function | 頁面尺寸改變時觸發,詳見 響應顯示區域變化 | ||
onTabItemTap | function | 當前是 tab 頁時,點擊 tab 時觸發 | ||
其他 | any | 開發者可以添加任意的函數或數據到 Object 參數中,在頁面的函數中用 this 可以訪問 |
App(Object object)
註冊小程序。接受一個 Object
參數,其指定小程序的生命週期回調等。
App() 必須在 app.js
中調用,必須調用且只能調用一次。不然會出現無法預期的後果。
參數
Object object
屬性 | 類型 | 默認值 | 必填 | 說明 | 最低版本 |
---|---|---|---|---|---|
onLaunch | function | 否 | 生命週期回調——監聽小程序初始化。 | ||
onShow | function | 否 | 生命週期回調——監聽小程序啓動或切前臺。 | ||
onHide | function | 否 | 生命週期回調——監聽小程序切後臺。 | ||
onError | function | 否 | 錯誤監聽函數。 | ||
onPageNotFound | function | 否 | 頁面不存在監聽函數。 | 1.9.90 | |
onUnhandledRejection | function | 否 | 未處理的 Promise 拒絕事件監聽函數。 | 2.10.0 | |
onThemeChange | function | 否 | 監聽系統主題變化 | 2.11.0 | |
其他 | any | 否 | 開發者可以添加任意的函數或數據變量到 Object 參數中,用 this 可以訪問 |
小程序根目錄下的 app.json
文件用來對微信小程序進行全局配置。文件內容爲一個 JSON 對象
每一個小程序頁面也可以使用 .json
文件來對本頁面的窗口表現進行配置。頁面中配置項在當前頁面會覆蓋 app.json
的 window
中相同的配置項。
小程序根目錄下的 sitemap.json
文件用於配置小程序及其頁面是否允許被微信索引,文件內容爲一個 JSON 對象,如果沒有 sitemap.json
,則默認爲所有頁面都允許被索引