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


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

1.先導

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

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

分析:

  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 參數說明:

參數 類型 必填 說明
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 頁面

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對象即為參數對象,可以通過參數鍵來取出參數值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2024 CODEPRJ.COM