E企盈小程序营销工具技术服务商 热线:4006-838-530

微信小程序路由拦截器

E企盈小程序直播系统

背景由于最近公司要求开发小程序,一直很感兴趣,也是趁着这次机会,边文档边开发,遇到一些好玩的东西,留此作为笔记介绍在开发小程序,构建路由时,因为需要权限判断,最常见的就是在路由跳转时判断用户是否有权限访问或使用该功能,而在官网找了很久也没有看到,诸如 vue-router 的 beforeEach 那样的路由拦截器,但是拦截是肯定需要的,所以自己写了一个代码直接上代码拦截器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)}使用// 小程序 .js文件// 官方写法Page({  data: {  }})// 将Page替换import { routerFillter } from ‘../../utils/routerFillter.js’;routerFillter({  // 内部一样}, true)其实原理很简单,就是在微信小程序注册页面接受一个初始化对象前拦截做些处理,我这里判断无权限时,更改原pageObj的 onShow生命周期函数,改为重定向去登陆页,操作完再return 出微信小程序注册页面所需的Page({pageObj})就行,原理很简单,思路证实可行存在问题问题是有的,就是因为我更改的是onShow生命周期,而小程序在触发onShow时,页面已经展示了,导致页面可能会先闪现一次页面,才会重定向到登陆页,也想过更改onLoad生命周期,但是也是有问题的,因为有些页面如果设置了缓存,会导致onLoad只触发一次,也就是说,只能拦截一次(很尴尬)所以这篇文章即是分享一种方法,也是寻求一种解决方案

赞(0) 打赏
未经允许不得转载:E企盈小程序开发-热线:4006-838-530 » 微信小程序路由拦截器
分享到: 更多 (0)
E企盈小程序直播营销卖货系统

评论 抢沙发

E企盈小程序开发

联系我们联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏