亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 課堂 > 小程序 > 正文

微信小程序如何實現全局重新加載

2020-03-21 15:54:32
字體:
來源:轉載
供稿:網友

背景:

隨著業務的增加,我們服務器需要計算大量的用戶數據,導致用戶跟客服反應頁面不能正常展示。反饋給開發后,我們一看,是服務器異常的錯誤。So,產品想看下我們到底有多少用戶頁面不能正常展示?

方案:

  1. 后端人員直接在阿里云后臺去查哪些接口異常
  2. 前端做一個服務器報錯頁,這樣產品在小程序后臺能看到這個頁面的PV,UV

技術方案

因為業務龐大,所以我們不可能區在每個頁面加上重新加載的邏輯。所以初步考慮使用全局重新加載。

需要解決的問題都有哪些?

  1. 首先我們要有網絡請求失敗的全局控制權(要不然就需要在每個頁面處理失敗的情況)
  2. 需要定義好網絡失敗后是如何跳轉到重載頁(R)的(用wx.redirectTo,wx.reLaunch還是其他)
  3. 點擊錯誤頁的“重新加載”,如何返回或跳轉到出錯頁(E)(用wx.redirectTo,wx.reLaunch還是其他)
  4. 跳轉到出錯頁后,如何重新加載數據(把所有請求都放在Page.onShow()里面?)
  5. 那如果從出錯頁的上個界面(P)傳到出錯頁(E)options,那重載頁(R)又將如何處理?
  6. 點擊重新加載跟返回,我們希望效果效果一樣,又該如何操作?

實踐的方式如下

第一個問題: 比較好解決,我們基于wx.request已經封裝了為fetch(如果還在用wx.request的項目可以考慮封裝下,好處多多)?;趂etch我們可以用res.statusCode來判斷服務器是否出錯。

第二個問題: 暫且先不說具體的跳轉方式是怎樣的,就跳轉的url這個怎么定義也需要我們來討論下。為什么這么說,因為我們的架構涉及到了分包。分包加載意味著我們的代碼不僅僅是在pages下面,還放在了package下。

基于此,我們在跳轉的時候,url能直接寫成'../serverError/serverError'嗎?在主包下面可以正常跳轉,但是在分包下,路徑是'package/serverError/serverError',這樣跳肯定不行。url應該是根目錄下的路徑,所以'/pages/serverError/serverError'。

路徑確認后,我們可以跳轉了。如果是wx.redirectTo(關閉當前頁面,跳轉到應用內的某個頁面),想象下關閉E跳轉到R,點擊重新加載,再關閉R跳轉到E,這么跳轉路徑復雜,用戶體驗不好,并且options的參數需要逐級傳遞。wx.reLaunch類似。我們用所以我們選擇wx.navigateTo。

第三個問題: 綜合問題二的解釋,跳回到E,我們用wx.navigateBack。

第四個問題: 如果從R用wx.navigateBack回到E的話,肯定會觸發E.onShow()方法。但是有些請求我們除了寫在Page.onShow()里,還有些是寫在Page.onLoad()里的,所以我們必須想辦法調起E.onLoad()。

大家對于getCurrentPages()這個方法肯定不陌生,官方定義是來獲取當前頁面棧,我們一般用它來獲取當前頁面路徑。其實在這個過程中,我們是能拿到當前頁面的實例的,并且實例里面有route(頁面路徑)options(頁面傳遞參數)data(頁面初始參數)以及各種function()等等。

利用previousPageClass()我們可以拿到E的實例,也就可以拿到E.options,當然我們也可以調E.onLoad()。

util.js// 獲取當前路徑function currentPagePath() { let pageData = getCurrentPages() if (pageData.length >= 1) { let len = pageData.length - 1 let data = pageData[len] return data.route } else { return '' }}// 獲取上個界面的實例function previousPageClass() { let pageData = getCurrentPages() if (pageData.length >= 2) { let len = pageData.length - 2 let preClass = pageData[len] return preClass } else { return '' }}module.exports = { currentPagePath, previousPageClass}

第五個問題: 基于問題的四的方案,我們可以調E.onLoad(E.options)來將我們的參數回傳回去。

第六個問題: 點擊返回,相當于頁面卸載,也就是執行了R.onUnload(),這個時候我們只需要執行E.onLoad(E.options)這個方法,把options傳過去,以及調用起E.onLoad()就OK了。

但是點擊重新加載,我們是調的wx.navigateBack(),這個方法也會走R.onUnload()。這是時候可能有些苦惱了,我們隱藏掉返回按鈕?發現官方并沒有提供此方法。禁用R.onUnload(),好像也不行。因為R.onUnload()是在點擊重新加載后才執行的,所以我們可以記錄下用戶是否點擊了重新加載的行為。然后我們通過記錄的行為,即便用戶點擊了重新加載,然后觸發了R.onUnload(),我們不去執行E.onLoad(E.options)就OK了。

// pages/serverError/serverError.jsimport { previousPageClass } from '../../utils/util.js'let isClickReload = falsePage({ onLoad: function (options) { isClickReload = false }, onUnload: function () { if(!isClickReload) {  this.callbackParams() }  }, /** * 點擊事件 */ clickReload: function (e) { isClickReload = true wx.navigateBack() this.callbackParams() }, // 點擊返回,參數回傳 callbackParams: function () { let preOptions = previousPageClass().options previousPageClass().onLoad(preOptions) }})

至此所有問題,基本都已解決。

Demo代碼附上,歡迎參考。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VEVB武林網的支持。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品久久久久久中文字幕一区奶水| 热久久这里只有| 日韩精品在线看| 成人免费视频a| 成人中文字幕在线观看| 日韩欧美精品在线观看| 亚洲欧美国产精品va在线观看| 亚洲第一国产精品| 欧美大人香蕉在线| 青青久久aⅴ北条麻妃| 亚洲欧洲在线观看| 欧美中文字幕视频在线观看| 久久久久国产精品一区| 懂色aⅴ精品一区二区三区蜜月| 欧美成年人在线观看| 成人午夜在线影院| 国产精品十八以下禁看| 国产精品久久久久久久久男| 日韩极品精品视频免费观看| 久久久久久这里只有精品| 国产精品夜色7777狼人| 日韩中文有码在线视频| 91精品久久久久久久久| 亚洲高清在线观看| 国产日韩精品一区二区| 国产精品美乳一区二区免费| 亚洲激情在线观看视频免费| 精品少妇v888av| 精品国产91久久久久久老师| 91免费精品国偷自产在线| 91地址最新发布| 国产色视频一区| 亚洲精品视频中文字幕| 色噜噜狠狠狠综合曰曰曰88av| 91午夜在线播放| 久久天天躁夜夜躁狠狠躁2022| 91chinesevideo永久地址| 亚洲精品永久免费| 亚洲精品久久久久久久久久久久久| 亚洲视频精品在线| 国产一区二区丝袜| 亚洲欧洲午夜一线一品| 91av在线影院| 日韩中文字幕不卡视频| 国产视频丨精品|在线观看| 97视频在线观看网址| 欧美裸体男粗大视频在线观看| 亚洲第一中文字幕在线观看| 国产v综合ⅴ日韩v欧美大片| 国产成人综合av| 亚洲国产日韩一区| 欧美成人免费一级人片100| 欧美在线视频网站| 亚洲伊人一本大道中文字幕| 欧美精品免费在线观看| 一区二区欧美久久| 久久不射电影网| 91国产美女在线观看| 欧美一级片免费在线| 久久久久久这里只有精品| 欧美在线视频在线播放完整版免费观看| 亚洲图片在区色| 国模私拍一区二区三区| www.欧美精品一二三区| 国产xxx69麻豆国语对白| 亚洲国产精品yw在线观看| 伊人久久男人天堂| 国产亚洲欧美一区| 精品精品国产国产自在线| 久久69精品久久久久久久电影好| 国产精品第3页| 日韩欧美亚洲一二三区| 欧美日韩一区二区免费在线观看| 久久精品最新地址| 亚洲xxxx视频| 久久久久亚洲精品成人网小说| 国产视频在线观看一区二区| 久久久久女教师免费一区| 九九热最新视频//这里只有精品| 精品国产乱码久久久久酒店| 国产成人久久久精品一区| 亚洲国产日韩欧美综合久久| 日韩一区二区福利| 国产又爽又黄的激情精品视频| 91成人在线播放| 国产精品三级网站| 91手机视频在线观看| 日韩高清人体午夜| 欧美老少配视频| 亚洲国产成人久久综合一区| 成人在线精品视频| 2021久久精品国产99国产精品| 国产精品jvid在线观看蜜臀| 8x拔播拔播x8国产精品| 中文字幕欧美精品在线| 欧美精品18videos性欧| 欧美在线视频网站| 日韩最新中文字幕电影免费看| 538国产精品视频一区二区| 精品福利一区二区| 久久久久久久久久久人体| 亚洲精品国产suv| 色播久久人人爽人人爽人人片视av| 亚洲女同性videos| 国产欧美日韩中文字幕在线| 亚洲国产欧美久久| 免费不卡欧美自拍视频| 国产一区在线播放| 国产亚洲欧洲在线| 欧美日韩一区二区免费视频| 欧美乱大交xxxxx另类电影| 色老头一区二区三区在线观看| 精品亚洲一区二区三区| 精品美女久久久久久免费| 久久久电影免费观看完整版| 久久久久日韩精品久久久男男| 日韩精品中文字幕在线播放| 国产精品嫩草影院久久久| 久久69精品久久久久久久电影好| 国产精品美女免费| 91在线网站视频| 国产精品国产亚洲伊人久久| 国产成人精品最新| 日韩在线激情视频| 国产精彩精品视频| 亚洲精品电影在线观看| 亚洲精品国产精品国自产观看浪潮| 欧美综合激情网| 懂色av影视一区二区三区| 国产91热爆ts人妖在线| 欧美日本中文字幕| 久久精品青青大伊人av| 亚洲精品国产精品国产自| 欧美高清理论片| 国产一区玩具在线观看| 一区二区亚洲欧洲国产日韩| 欧美日韩999| 国产亚洲美女久久| 亚洲精品国精品久久99热一| 日韩毛片在线看| 精品福利一区二区| 在线亚洲男人天堂| 亚洲午夜av电影| 久久精品91久久香蕉加勒比| 国产精品亚洲第一区| 欧美日韩国产精品一区| 国产成人在线一区二区| 亚洲日本中文字幕免费在线不卡| 日韩av免费在线观看| 精品久久久久久久久久久久久久| 在线观看日韩av| 91在线高清免费观看| 精品动漫一区二区三区| 日韩欧美第一页| 高跟丝袜欧美一区| 国产精品第1页| 久久久中精品2020中文| 亚洲精品视频播放| 国产精品直播网红| 亚洲国产精品高清久久久| 中文字幕精品在线视频| 欧美日韩精品在线| 欧美精品国产精品日韩精品| 91精品久久久久久久久久另类|