拦截器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