微信小程序中如果從一個頁面中進入下一個頁面,如果下個頁面的數據有刪除或者增加再返回上一個頁面的時候,就會導致頁面不刷新(數據加載函數在onload中),從而造成數據不一致的情況。其實在微信小程序中是可以實現改變上一個頁面中的數據似的前后兩個頁面數據一致的。
一般的方法可以使用本地緩存將當前頁面的數據放入,回到上級頁面的時候再從緩存中讀取出來,還有就是使用頁面棧的。
獲取當前頁面棧的實例可以通過getCurrentPages() 函數。以數組形式按棧的順序給出,第一個元素為首頁,最后一個元素及時當前頁面。
以下為頁面棧的使用例子:
前一頁面:
Page({
data: {
name: ''
},
...
,
//更新name
changeData: function(name){
this.setData({
name: name
})
}
})
當前頁面:
Page({
//此方法用於文本框輸入回調
inputTyping: function (e) {
//獲取頁面棧
var pages = getCurrentPages();
var Page = pages[pages.length - 1];//當前頁
var info = prevPage.data //取上頁data里的數據也可以修改
if(pages.length > 1){ //說明有上一頁存在
//上一個頁面實例對象
var prePage = pages[pages.length - 2];
//關鍵在這里,調用上一頁的函數
prePage.changeData(e.detail.value)
}
}
})
這樣就可以實現數據傳遞給上一個頁面,要注意頁面上一頁面必須使用wx.navigateTo()跳轉到下一頁面,不能使用wx.redirectTo,這樣會關閉上一個頁面,導致頁面B無法獲取上一頁Page實例。