H5技术栈让前端飞前端开发笔记

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

2018-06-05  本文已影响19人  茶树菇小学生

背景

介绍

代码


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})就行,原理很简单,思路证实可行

存在问题

上一篇 下一篇

猜你喜欢

热点阅读