原創聲明:本文為作者原創,未經允許不得轉載,經授權轉載需注明作者和出處
小程序開發過程中經常有這種需求,需要把當前頁面數據傳遞給上一個頁面,但是wx.navigateBack()無法傳遞數據。
一般的辦法是把當前頁面數據放入本地緩存,上一個頁面再從緩存中取出。
除此之外還有一種辦法,巧妙利用頁面棧。
getCurrentPages() 函數用于獲取當前頁面棧的實例,以數組形式按棧的順序給出,第一個元素為首頁,最后一個元素為當前頁面。
重點就在這里,在當前頁面拿到上一個頁面的實例對象,然后調用該對象的方法完成數據傳遞。
頁面A
Page({
data: {
name: ''
},
...
,
//更新name
changeData: function(name){
this.setData({
name: name
})
}
})
頁面B,假設有一個文本框用于輸入姓名,點擊返回按鈕后更新頁面A的name
Page({
//此方法用于文本框輸入回調
inputTyping: function (e) {
//獲取頁面棧
var pages = getCurrentPages();
if(pages.length > 1){
//上一個頁面實例對象
var prePage = pages[pages.length - 2];
//關鍵在這里
prePage.changeData(e.detail.value)
}
}
})
這樣就可以實現數據傳遞給上一個頁面,要注意頁面A必須使用wx.navigateTo跳轉到頁面B,不能使用wx.redirectTo,這樣會關閉上一個頁面,導致頁面B無法獲取上一頁Page實例。