控制指定的頁面刷新

當我們在某個頁面進行操作之後,我們希望指定的那個頁面能刷新,以小程序爲例子

我們需要設置一個全局的變量,作爲刷新的列表,存儲指定刷新的頁面的路由,然後定義兩個全局的函數,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的路由'])
},

稍顯簡陋,如果有更好的建議請給我留言,感激~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章