当我们在某个页面进行操作之后,我们希望指定的那个页面能刷新,以小程序为例子
我们需要设置一个全局的变量,作为刷新的列表,存储指定刷新的页面的路由,然后定义两个全局的函数,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的路由']) },
稍显简陋,如果有更好的建议请给我留言,感激~
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233378.html原文链接:https://javaforall.net