// 更新2018/11/20:現在小程序的頁面棧長度為10
更正 2018/11/20:
經過一段時間的實踐,我發現以前方法存在很多問題,比如 getCurrentPages 方法並不在官方的 API 列表中,route 屬性是私有的,存在被廢棄/替代的可能;又比如原來的代碼摻雜了許多業務無關的邏輯,變得冗余,不易后期維護。
現在要實現原來的需求,我更推薦這樣做:
onLoad() {
this.init()
}
init() {
this.checkAuth()
.then(this.fetchData)
}
checkAuth() {
// check authorization,return a Promise
}
fetchData() {
// fetch api and render page
}
更正完畢
需求:
小程序需要判斷用戶是否登錄,來顯示不同的內容。當登錄失效后需要重新登錄並刷新頁面,一般我們用 redirect 或者 switchTab 方法進行頁面間的跳轉,通過getCurrentPages() 拿到頁面棧(數組,最多510個),最后一個就是當前頁面的路徑。
自然而然想到這樣來刷新當前頁:
const reload= () => {
let pages = getCurrentPages()
if (pages.length === 0) return
let curPage = pages[pages.length - 1].__route__;
wx.redirectTo({
url: '/' + curPage
})
}
這段代碼在小程序內頁工作的很好,但一到tab頁就GG思密達了——並!不!會!刷!新!
下面的方法可以解決:
const reload= () => {
let pages = getCurrentPages()
if (pages.length === 0) return
let curPage = pages[pages.length - 1];
curPage.onShow();
}