微信小程式(九):頁面跳轉
功能點:頁面跳轉
本文基於微信小程式公測版,IDE:微信開發者工具 0.11.122100
這裡記錄一下小程式中頁面跳轉的方式。
從跳轉的方式(或說成開啟新頁面的方式)來說大致可分為:請求轉發,請求重定向 和 TAB頁跳轉(有過web經驗的話,應該很清楚兩種方式的區別),部分出自官方文件。
wx.navigateTo(OBJECT)
保留當前頁面,跳轉到應用內的某個頁面,使用wx.navigateBack可以返回到原頁面。
注意點:小程式中要求頁面的層級最多隻能有五層,因為這種方式保留當前頁面,也就是說以這種方式跳轉頁面,最多隻能開啟5個頁面。
wx.redirectTo(OBJECT)
關閉當前頁面,跳轉到應用內的某個頁面。
wx.switchTab(OBJECT)
跳轉到 tabBar 頁面,並關閉其他所有非 tabBar 頁面
wx.navigateBack(OBJECT)
關閉當前頁面,返回上一頁面或多級頁面。可通過 getCurrentPages()) 獲取當前的頁面棧,決定需要返回幾層。
注意點:
1.這裡需要強調一下小程式中以堆疊形式記錄頁面。每一個以wx.navigateTo(OBJECT)
方式跳轉的頁面都會被壓入堆疊,但是以wx.redirectTo(OBJECT)
開啟的頁面則不會。借用一下官方的例子,很清晰明瞭。
// 此處是A頁面
wx.navigateTo({
url: 'B?id=1'
})
// 此處是B頁面
wx.redirectTo({
url: 'C?id=1'
})
// 在C頁面內 navigateBack,將返回A頁面
wx.navigateBack()
**2.**wx.navigateTo 和 wx.redirectTo 不允許跳轉到 tabbar 頁面,只能用 wx.switchTab 跳轉到 tabbar 頁面
3. 跳轉的url是頁面的路徑(非Tab頁面),如需傳遞引數,要放在路徑之後,以?
分隔,引數鍵與引數值用=相連,不同引數用&分隔
從寫的位置來說大致可分為兩種,一種是在頁面wxml檔案中以標籤的形式,另一種是程式碼的形式(這種上面已經列舉出來了,此處不再贅述)。
元件navigator
頁面連結。
通過open-type
可以指定跳轉的方式是請求轉發,請求重定向還是TAB頁跳轉。(效果同上面js程式碼的效果,此處不再贅述)
這裡記錄一個筆者遇到的坑,坑了我一晚上。。。也是很無語。雖然不是頁面跳轉的問題,但是也有一定聯絡,姑且記在這裡。
本來我的專案首頁有兩個tab,需要在其中一個列表頁中點選一個item進入詳情,檢視地圖。然而,不管我怎麼嘗試,文件擼了N遍,都還是沒解決。
先貼出異常
上面報錯的aboutUs是首頁的其中另一個tab,只是一個展示頁,沒有操作,所以雖然報錯了,然而我並沒有管。問題出在我跳轉pages/map(詳情的地圖)的時候,提示我如上最後一行的錯誤。
Page[pages/map/map] not found. May be caused by: 1. Forgot to add page route in app.json. 2. Invoking Page() in async task.
按照筆者以前android和後臺的經驗,一直把問題定位到map頁的本身。擼了N久都沒解決。後來心血來潮把aboutUs的異常解決了,發現問題奇蹟般的解決了。
問題出在,aboutUs頁,因為只是一個靜態頁,並沒有操作,所以aboutUs.js是空的,問題就出在這。
在小程式中,即時不需要寫js的程式碼,那js檔案中也必須要加上Page({})
。