當我們在某個頁面進行操作之後,我們希望指定的那個頁面能刷新,以小程序爲例子
我們需要設置一個全局的變量,作爲刷新的列表,存儲指定刷新的頁面的路由,然後定義兩個全局的函數,setReflash和execReflash;setReflash將當前頁面的上一頁的路由或者指定的多個路由添加到刷新列表中:
// 設置返回上一頁要刷新提示
// callback function 要回調執行的函數
// routes Array 路由數組
setReflash: function (callback, routes) {
// var pages = getCurrentPages();
// var prevPage = pages[pages.length - 2]; // 上1個頁面
// var prevPath = prevPage.route; // 上一頁路徑
// 將全局變量reflashPath設置爲上一頁路徑
var routeArr = this.globalData.reflashPath || [];
console.log('routes:', routeArr, routes)
if (routes && routes.length > 0) {
for (let route of routes) {
if (routeArr.indexOf(route) == -1) {
routeArr.push(route);
}
}
this.globalData.reflashPath = routeArr;
} else {
console.log('--ss1--');
var route = this.getPagePath(1);
if (routeArr.indexOf(route) == -1) {
routeArr.push(route);
}
this.globalData.reflashPath = routeArr;
console.log(routeArr);
}
callback && callback();
},
execReflash用於檢驗當前頁面是否在刷新列表內,若是,則執行刷新,並將刷新的頁面的路由從刷新列表中移除,否則不執行刷新:
// 刷新包裝處理函數
// callback function 刷新需要執行的回調函數
execReflash: function (callback) {
// 獲取當前頁面路徑
var curPath = this.getPagePath(0);
console.log('curPath:', curPath)
var routes = this.globalData.reflashPath || [];
console.log('routes:', routes)
if (routes && routes.length > 0) {
for (let i in routes) {
if (routes[i] == curPath) {
routes.splice(i, 1);
callback && callback();
break;
}
}
}
},
實際應用:
// 假設場景 用戶進入過頁面A ,從頁面B 進入頁面C,現在返回時需要刷新頁面B,並且當再次進入頁面A時,需要刷新頁面A
// pageA 的onShow函數中
onShow:function(){
execReflash(()=>{
// 執行刷新內容,請求接口獲取數據等
})
},
// pageB 的onShow函數中
onShow:function(){
execReflash(()=>{
// 執行刷新內容,請求接口獲取數據等
})
},
// pageC 的某個函數中
toDo:function(){
setReflash(()=>{
// 返回上一頁
wx.navigateBack({ delta:1 })
},['頁面A的路由','頁面B的路由'])
},
稍顯簡陋,如果有更好的建議請給我留言,感激~