頁面棧是以棧的形式維護(hù)頁面與頁面之間的關(guān)系,遵循棧的原則,先進(jìn)后出褐奴,在微信小程序中有g(shù)etCurrentPages()函數(shù)獲取頁面棧配乱。
通常我們會(huì)選擇帶參傳值的方法溉卓,但是有一些情況可能使用帶參傳值不太理想
舉一個(gè)栗子(網(wǎng)上看到的栗子)
1. 在【頁面A】中調(diào)用wx.navigateTo方法跳轉(zhuǎn)到【頁面B】
2. 然后從【頁面B】返回【頁面A】, 并將【頁面B】中的一些數(shù)據(jù)傳回【頁面A】
如下圖所示,我在這個(gè)表單頁面A中填寫數(shù)據(jù)
然后這個(gè)頁面上搬泥,有一個(gè)搜索按鈕桑寨,點(diǎn)擊該按鈕,將跳轉(zhuǎn)到另一個(gè)證券代碼搜索頁面B
當(dāng)我在這個(gè)搜索列表中選中一個(gè)證券代碼后忿檩,將返回到上一個(gè)表單頁面尉尾,繼續(xù)我未完成的表單填寫與提交操作。
這種場(chǎng)景是非常合理和常見的燥透。
但是沙咏,我們來想一下,怎么在退出頁面B兽掰,返回頁面A的時(shí)候芭碍,把頁面B中選中的證券代碼回傳給頁面A呢?
使用navigateTo()中url攜帶參數(shù)的方式孽尽?
基于Page生命周期的原因窖壕,我們的答案是:不行
原作者文章地址,有興趣的可以看一下,就點(diǎn)這句話就可以去看看
這個(gè)栗子原作者說因?yàn)樯芷诘脑蛘胺恚荒苁褂胣avigateTo()中url攜帶參數(shù)的方式鸳吸,我啊,暫時(shí)沒有遇到這種情況速勇,但是我遇到了同樣不能使用navigateTo()中url攜帶參數(shù)的方式晌砾,當(dāng)當(dāng)當(dāng),跳轉(zhuǎn)到tab頁面烦磁,switchTab的url不能帶參养匈,涼涼,所以就用到了頁面棧的方法
接下來都伪,進(jìn)入正軌呕乎,頁面棧到底怎么用?陨晶?猬仁?
又舉個(gè)例子
首先在頁面A的wxml寫一段代碼,讓把傳遞過來的值可以顯示出來
<view bindtap='bindtap'>跳轉(zhuǎn)到新頁面{{info.name}}{{info.phone}}{{info.address}}</view>
這里有一個(gè)點(diǎn)擊事件先誉,觸發(fā)點(diǎn)擊事件跳轉(zhuǎn)到B頁面湿刽,B頁面也就是A頁面的下一個(gè)頁面,
頁面A的js
data: {
info:[]
},
bindtap:function(){
wx.navigateTo({
url: '../pageB/pageB',
})
},
在這里褐耳,給A頁面一個(gè)原始數(shù)據(jù)info為空
然后進(jìn)入B頁面
頁面B的wxml
<text bindtap='bindtapback'>pages/pageB/pageB.wxml</text>
頁面B的js
data: {
name: '周杰倫',
phone: '123456789',
address: '臺(tái)北'
},
bindtapback:function(){
var that = this;
var pages = getCurrentPages()
var currPage = pages[pages.length - 1]; //當(dāng)前頁面
var prevPage = pages[pages.length - 2]; //上一個(gè)頁面
if (prevPage.route == 'pages/pageA/pageA') {
wx.navigateBack({
delta: 1,
success: function () {
var info = {
name: that.data.name,
phone: that.data.phone,
address: that.data.address
}
console.log(info)
prevPage.setData({
info: info
})
}
})
}
},
```swift
var pages = getCurrentPages()
var currPage = pages[pages.length - 1]; //當(dāng)前頁面
var prevPage = pages[pages.length - 2]; //上一個(gè)頁面
這里就是獲取頁面棧诈闺,首先將獲取到所有的頁面存入一個(gè)數(shù)組中,然后根據(jù)你的需要進(jìn)行頁面跳轉(zhuǎn)
好啦好啦漱病,方法大概就是這樣
溜了溜了
方法三买雾,改日再寫吧