小程序頁(yè)面的實(shí)例使用棧的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ),棧內(nèi)元素最多5個(gè)(換一種方式說(shuō),就是用戶最多能點(diǎn)擊5次返回),微信小程序能在棧中相對(duì)高層某個(gè)頁(yè)面調(diào)用其他相對(duì)低層的頁(yè)面實(shí)例的方法。小程序三種頁(yè)面跳轉(zhuǎn)API 的區(qū)別在于: ...
小程序頁(yè)面的實(shí)例使用棧的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ),棧內(nèi)元素最多5個(gè)(換一種方式說(shuō),就是用戶最多能點(diǎn)擊5次返回),微信小程序能在棧中相對(duì)高層某個(gè)頁(yè)面調(diào)用其他相對(duì)低層的頁(yè)面實(shí)例的方法。
小程序三種頁(yè)面跳轉(zhuǎn)API 的區(qū)別在于:
wx.navigateTo 不會(huì)將舊頁(yè)面出棧,會(huì)將新頁(yè)面入棧。(棧內(nèi)元素個(gè)數(shù)增加,棧內(nèi)元素5個(gè)時(shí),不能再跳轉(zhuǎn))wx.redirectTo 會(huì)將棧頂?shù)呐f頁(yè)面出棧,再將需要跳轉(zhuǎn)到的頁(yè)面入棧(棧內(nèi)元素個(gè)數(shù)不變);wx.navigateBack 則是將頁(yè)面棧最后一個(gè)元素出棧,因此倒數(shù)第二個(gè)元素會(huì)成為最后一個(gè)元素,即變成當(dāng)前頁(yè)面;也可以連續(xù)出棧好幾個(gè)元素(大于棧內(nèi)元素的個(gè)數(shù)則返回首頁(yè))返回棧中的某個(gè)頁(yè)面。結(jié)合下面一個(gè)例子對(duì)上面的內(nèi)容的理解:
有一個(gè)小程序包含 A、B、C、D 四個(gè)頁(yè)面,A 為首頁(yè)。小程序啟動(dòng)后,在 A 頁(yè)面中,此時(shí)棧中有一個(gè)元素A,我們通過(guò) navigateTo 跳轉(zhuǎn)到 B 頁(yè)面,然后在 B 頁(yè)面中再通過(guò) navigateTo 跳轉(zhuǎn)到 C 頁(yè)面。此時(shí)頁(yè)面棧中就會(huì)包含三個(gè)元素,分別為 A、B、C 三個(gè)頁(yè)面。而此時(shí)如果通過(guò) redirectTo 跳轉(zhuǎn)到 D 頁(yè)面,redirectTo 會(huì)將棧頂頁(yè)面出棧,即將 C 頁(yè)面出棧,再將 D 頁(yè)面入棧,這時(shí)候,頁(yè)面棧中的元素則會(huì)變?yōu)?A、B、D。此時(shí)如果在 D 頁(yè)面調(diào)用 navigateBack,會(huì)發(fā)現(xiàn)不是返回 C 頁(yè)面,而是返回到了 B 頁(yè)面。當(dāng)然也可以直接在D頁(yè)面返回A,設(shè)置navigateBack的delta參數(shù)為2。
特殊情況,減少navigateTo的使用
描述
舉個(gè)栗子:比如小程序的商城,在用戶下單的頁(yè)面(下面簡(jiǎn)稱:下單界面)很多時(shí)候用戶需要選擇收獲地址,然后程序根據(jù)用戶的選擇再返回該界面顯示用戶選擇的收獲地址是什么??赡苄枰谟脩舻南聠谓缑嫣D(zhuǎn)到地址界面,地址的界面可能有編輯地址之類的操作,用戶選擇地址后返回下單界面,顯示剛剛用戶選擇的收獲地址是什么。這個(gè)時(shí)候可以采用以下方法,減少navigateTo的使用。很多情況下都會(huì)有畫(huà)圈這樣的操作,就是經(jīng)過(guò)一系列的界面后取得數(shù)據(jù)又返回了原來(lái)的界面,這個(gè)時(shí)候可以使用
編輯完當(dāng)前頁(yè)面返回?cái)?shù)據(jù)到上一頁(yè)更新,假設(shè)當(dāng)前在首頁(yè)A頁(yè)面,需要跳轉(zhuǎn)到B頁(yè)面采集用戶的選擇的數(shù)據(jù),然后在返回A界面更新顯示。代碼例子如下
//A界面Page({data: {userName: ''},getBackData: function(name){this.setData({userName: name})}})//B頁(yè)面Page({edtinputname: function (e) {var name="張三";var pagelist = getCurrentPages();if(pagelist.length > 1){//獲取上一個(gè)頁(yè)面實(shí)例對(duì)象var prePage = pagelist[pagelist.length - 2];prePage.getBackData(name);wx.navigateBack({delta: 1})}})這樣能夠使得取得數(shù)據(jù)但不會(huì)增加棧中的元素個(gè)數(shù),減少navigateTo的使用