登录 | 注册
小程序交流 +关注 已有0人关注 +发表新主题

小程序开发页面拦截器

精华 发表在 2019-3-5 18:53 来自PC 复制链接 手机看帖 扫一扫!手机看帖更爽 0 371

小程序开发页面拦截器

小程序开发页面拦截器
由于最近公司要求开发小程序,一直很感兴趣,也是趁着这次机会,边文档边开发,遇到一些好玩的东西,留此作为笔记
在开发小程序,构建路由时,因为需要权限判断,最常见的就是在路由跳转时判断用户是否有权限访问或使用该功能,而在官网找了很久也没有看到,诸如 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)
其实原理很简单,就是在微信小程序注册页面接受一个初始化对象前拦截做些处理,我这里判断无权限时,更改原pageObjonShow生命周期函数,改为重定向去登陆页,操作完再return 出微信小程序注册页面所需的Page({pageObj})就行,原理很简单,思路证实可行
存在问题
问题是有的,就是因为我更改的是onShow生命周期,而小程序在触发onShow,页面已经展示了,导致页面可能会先闪现一次页面,才会重定向到登陆页,
也想过更改onLoad生命周期,但是也是有问题的,因为有些页面如果设置了缓存,会导致onLoad只触发一次,也就是说,只能拦截一次(很尴尬)

扫描二维码,手机查看本帖
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部
快速回复 发贴