您当前的位置: 首页 > 解决方案

微信小程序--路由拦截器

  • 作者: admin
  • 发布于 2018-12-28 10:26:42
  • 来源:  
  • 栏目:解决方案

导语: 背景 由于最近公司要求开发小程序,一直很感兴趣,也是趁着这次机会,边文档边开发,遇到一些好玩的东西,留

 

背景

  • 由于最近公司要求开发小程序,一直很感兴趣,也是趁着这次机会,边文档边开发,遇到一些好玩的东西,留此作为笔记

介绍

  • 在开发小程序,构建路由时,因为需要权限判断,最常见的就是在路由跳转时判断用户是否有权限访问或使用该功能,而在官网找了很久也没有看到,诸如 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只触发一次,也就是说,只能拦截一次(很尴尬)

  • 所以这篇文章即是分享一种方法,也是寻求一种解决方案



温馨提示:这篇文章没有解决您的问题?欢迎添加微信:18948083295,有微信小程序专业人员,保证有问必答。转载本站文章请注明转自http://www.okeydown.com/(微信小程序网)。

  • 微信扫描二维码关注官方微信
  • ▲长按图片识别二维码
关注我们

微信小程序官方微信

栏目最新
栏目推荐
返回顶部