攔截器javascript
const appGlobalData = getApp().globalData; /** * routerFillter --全局路由攔截器 * @function * @param{Object} pageObj 當前頁面的page對象 * @param{Boolean} flag 是否開啓權限判斷 */ exports.routerFillter = function (pageObj, flag = false) { if (flag) { let _onShow = pageObj.onShow pageObj.onShow = function () { let that = this // 這一步是本身定義獲取登陸狀態的,只是個判斷權限的 appGlobalData.getSignPrms.then((res) => { // 改回this指針 res.status && _onShow.call(that) }, (err) => { // 用戶未登陸,重定向我的頁 wx.switchTab({ url: '/pages/manage/manage' }) }) } } return Page(pageObj) }
使用vue
// 小程序 .js文件 // 官方寫法 Page({ data: { } }) // 將Page替換 import { routerFillter } from '../../utils/routerFillter.js'; routerFillter({ // 內部同樣 }, true)
其實原理很簡單,就是在微信小程序註冊頁面接受一個初始化對象前攔截作些處理,我這裏判斷無權限時,更改原pageObj的 onShow生命週期函數,改成重定向去登錄頁,操做完再return 出微信小程序註冊頁面所需的Page({pageObj})就行,原理很簡單,思路證明可行java
也想過更改onLoad生命週期,可是也是有問題的,由於有些頁面若是設置了緩存,會致使onLoad只觸發一次,也就是說,只能攔截一次(很尷尬)vue-router