微信小程序擁有web網頁和Application共同的特徵,咱們的頁面都不是孤立存在的,而是經過和其餘頁面進行交互,來共同完成系統的功能。今天咱們來研究小程序頁面之間的跳轉方式。android
在Android中,咱們Activity和Fragment都有棧的概念在裏面,微信小程序頁面也有棧的概念在裏面。微信小程序頁面跳轉有四種方式: web
1.wx.navigateTo(OBJECT); 2.wx.redirectTo(OBJECT); 3.wx.switchTab(OBJECT); 4.wx.navigateBack(OBJECT) 5.使用實現對應的跳轉功能;
分析:json
tabBar
或是頁面裏面能夠再次跳轉按鈕,不然沒法回到上一個頁面;tabBar
中聲明的頁面;tabBar
中定義的字段不能超過5個頁面,小程序的頁面棧層次也不能超過5層。保留當前頁面,跳轉到應用內的某個頁面,使用wx.navigateBack能夠返回到原頁面。小程序
OBJECT 參數說明:微信小程序
參數 | 類型 | 必填 | 說明 |
---|---|---|---|
url | String | 是 | 須要跳轉的應用內非 tabBar 的頁面的路徑 , 路徑後能夠帶參數。參數與路徑之間使用?分隔,參數鍵與參數值用=相連,不一樣參數用&分隔;如 ‘path?key=value&key2=value2’ |
success | Function | 否 | 接口調用成功的回調函數 |
fail | Function | 否 | 接口調用失敗的回調函數 |
complete | Function | 否 | 接口調用結束的回調函數(調用成功、失敗都會執行) |
示例代碼:微信
wx.navigateTo({ url: 'test?id=1'//實際路徑要寫全 })
//test.js Page({ onLoad: function(option){ console.log(option.query) } })
注意:爲了避免讓用戶在使用小程序時形成困擾,咱們規定頁面路徑只能是五層,請儘可能避免多層級的交互方式。微信開發
關閉當前頁面,跳轉到應用內的某個頁面。
OBJECT 參數說明:app
參數 | 類型 | 必填 | 說明 |
---|---|---|---|
url | String | 是 | 須要跳轉的應用內非 tabBar 的頁面的路徑,路徑後能夠帶參數。參數與路徑之間使用?分隔,參數鍵與參數值用=相連,不一樣參數用&分隔;如 ‘path?key=value&key2=value2’ |
success | Function | 否 | 接口調用成功的回調函數 |
fail | Function | 否 | 接口調用失敗的回調函數 |
complete | Function | 否 | 接口調用結束的回調函數(調用成功、失敗都會執行) |
示例代碼:框架
wx.redirectTo({ url: 'test?id=1' })
跳轉到 tabBar 頁面,並關閉其餘全部非 tabBar 頁面ide
OBJECT 參數說明:
參數 | 類型 | 必填 | 說明 |
---|---|---|---|
url | String | 是 | 須要跳轉的 tabBar 頁面的路徑(需在 app.json 的 tabBar 字段定義的頁面),路徑後不能帶參數 |
success | Function | 否 | 接口調用成功的回調函數 |
fail | Function | 否 | 接口調用失敗的回調函數 |
complete | Function | 否 | 接口調用結束的回調函數(調用成功、失敗都會執行) |
示例代碼:
{ "tabBar": { "list": [{ "pagePath": "index", "text": "首頁" },{ "pagePath": "other", "text": "其餘" }] } }
wx.switchTab({ url: '/index' })
關閉當前頁面,返回上一頁面或多級頁面。可經過 getCurrentPages()) 獲取當前的頁面棧,決定須要返回幾層。
OBJECT 參數說明:
參數 | 類型 | 必填 | 說明 |
---|---|---|---|
delta | Number | 1 | 返回的頁面數,若是 delta 大於現有頁面數,則返回到首頁。 |
示例代碼:
// 注意:調用 navigateTo 跳轉時,調用該方法的頁面會被加入堆棧,而 redirectTo 方法則不會。見下方示例代碼 // 此處是A頁面 wx.navigateTo({ url: 'B?id=1' })
// 此處是B頁面 wx.navigateTo({ url: 'C?id=1' })
// 在C頁面內 navigateBack,將返回A頁面 wx.navigateBack({ delta: 2 })
<navigator/>
標籤實現頁面跳轉navigator
頁面連接。
參數 | 類型 | 必填 | 說明 |
---|---|---|---|
url | String | 應用內的跳轉連接 | |
redirect | Boolean | false | 打開方式爲頁面重定向,對應 wx.redirectTo(將被廢棄,推薦使用 open-type) |
open-type | String | navigate | 可選值 ‘navigate’、’redirect’、’switchTab’,對應於wx.navigateTo、wx.redirectTo、wx.switchTab的功能 |
hover-class | String | navigator-hover | 指定點擊時的樣式類,當hover-class=」none」時,沒有點擊態效果 |
hover-start-time | Number | 50 | 按住後多久出現點擊態,單位毫秒 |
hover-stay-time | Number | 600 | 手指鬆開後點擊態保留時間,單位毫秒 |
示例代碼:
<navigator url="navigate?title=navigate" hover-class="navigator-hover">跳轉到新頁面</navigator> <navigator url="redirect?title=redirect" open-type="redirect" hover-class="other-navigator-hover">在當前頁打開</navigator> <navigator url="index" open-type="switchTab" hover-class="other-navigator-hover">切換 Tab</navigator>
在小程序中全部頁面的路由所有由框架進行管理,對於路由的觸發方式以及頁面生命週期函數以下:
路由方式 | 觸發時機 | 路由後頁面 | 路由前頁面 |
---|---|---|---|
初始化 | 小程序打開的第一個頁面 | onLoad,onShow | |
打開新頁面 | 調用 API wx.navigateTo 或使用組件 | onLoad,onShow | onHide |
頁面重定向 | 調用 API wx.redirectTo 或使用組件 | onLoad,onShow | onUnload |
頁面返回 | 調用 API wx.navigateBack 或用戶按左上角返回按鈕 | onShow | onUnload(多層頁面返回每一個頁面都會按順序觸發onUnload) |
Tab 切換 | 調用 API wx.switchTab 或使用組件 或用戶切換 Tab | 各類狀況請參考下表 |
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() |
經過路徑傳遞參數在wx.navigateTo(OBJECT)
、wx.redirectTo(OBJECT)
和<navigator/>
中使用方法相同
示例代碼:以wx.navigateTo
爲表明
wx.navigateTo({ url: 'test?id=1'//實際路徑要寫全 })
//test.js Page({ onLoad: function(option){ console.log(option.id) } })
參數與路徑之間使用?分隔,參數鍵與參數值用=相連,不一樣參數用&分隔;
中id爲參數鍵,1 爲參數值
test?id=1
在目的頁面中onLoad()方法中option
對象即爲參數對象,能夠經過參數鍵來取出參數值