控制指定的页面刷新

当我们在某个页面进行操作之后,我们希望指定的那个页面能刷新,以小程序为例子

我们需要设置一个全局的变量,作为刷新的列表,存储指定刷新的页面的路由,然后定义两个全局的函数,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的路由'])
},

稍显简陋,如果有更好的建议请给我留言,感激~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值