微信小程序詳解——頁面之間的跳轉方式【路由】和參數傳遞

微信小程序擁有web網頁和Application共同的特徵,咱們的頁面都不是孤立存在的,而是經過和其餘頁面進行交互,來共同完成系統的功能。今天咱們來研究小程序頁面之間的跳轉方式。android

1.先導

Android中,咱們Activity和Fragment都有棧的概念在裏面,微信小程序頁面也有棧的概念在裏面。微信小程序頁面跳轉有四種方式: web

1.wx.navigateTo(OBJECT); 
2.wx.redirectTo(OBJECT); 
3.wx.switchTab(OBJECT); 
4.wx.navigateBack(OBJECT) 
5.使用實現對應的跳轉功能;

分析:json

  1. 其中navigateTo是將原來的頁面保存在頁面棧中,在跳入到下一個頁面的時候目標頁面也進棧,只有在這個狀況下點擊手機的返回按鈕才能夠跳轉到上一個頁面;
  2. redirectTo和switchTab都是先清除棧中原來的頁面,而後目標頁面進棧,使用這兩種跳轉方式,都不能經過系統的返回鍵回到上一個頁面,而是直接退出小程序;
  3. redirectTo使用的時候必定要配合tabBar或是頁面裏面能夠再次跳轉按鈕,不然沒法回到上一個頁面;
  4. switchTab跳轉的頁面必須是tabBar中聲明的頁面;
  5. tabBar中定義的字段不能超過5個頁面,小程序的頁面棧層次也不能超過5層。
  6. navigateBack只能返回到頁面棧中的指定頁面,通常和navigateTo配合使用。
  7. wx.navigateTo 和 wx.redirectTo 不容許跳轉到 tabbar 頁面,只能用 wx.switchTab 跳轉到 tabbar 頁面

2.頁面跳轉的具體操做

(1)wx.navigateTo(OBJECT)

保留當前頁面,跳轉到應用內的某個頁面,使用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)  
  }
})

注意:爲了避免讓用戶在使用小程序時形成困擾,咱們規定頁面路徑只能是五層,請儘可能避免多層級的交互方式。微信開發

(2)wx.redirectTo(OBJECT)

關閉當前頁面,跳轉到應用內的某個頁面。 
OBJECT 參數說明:app

參數 類型 必填 說明
url String 須要跳轉的應用內非 tabBar 的頁面的路徑,路徑後能夠帶參數。參數與路徑之間使用?分隔,參數鍵與參數值用=相連,不一樣參數用&分隔;如 ‘path?key=value&key2=value2’
success Function 接口調用成功的回調函數
fail Function 接口調用失敗的回調函數
complete Function 接口調用結束的回調函數(調用成功、失敗都會執行)

示例代碼:框架

wx.redirectTo({
  url: 'test?id=1'
})

(3)wx.switchTab(OBJECT)

跳轉到 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'
})

(4)wx.navigateBack(OBJECT)

關閉當前頁面,返回上一頁面或多級頁面。可經過 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
})

(5)使用<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>

3.頁面的路由和生命週期

(1)頁面的路由

在小程序中全部頁面的路由所有由框架進行管理,對於路由的觸發方式以及頁面生命週期函數以下:

路由方式 觸發時機 路由後頁面 路由前頁面
初始化 小程序打開的第一個頁面 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()

4.參數傳遞

(1)經過路徑傳遞參數

經過路徑傳遞參數在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)  
  }
})

參數與路徑之間使用?分隔,參數鍵與參數值用=相連,不一樣參數用&分隔; 

test?id=1
 中id爲參數鍵,1 爲參數值 
在目的頁面中onLoad()方法中option對象即爲參數對象,能夠經過參數鍵來取出參數值

相關文章
相關標籤/搜索