微信小程序是否有路由拦截_微信小程序--路由拦截器

背景

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

介绍

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505946.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue项目android,Android与Vue项目交互

1. Android代码class MainActivity : AppCompatActivity() {private lateinit var callJSBtn: Buttonprivate lateinit var webView: WebViewprivate var ajObject: AjObject AjObject()override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceSt…

updatebyprimarykeyselective返回什么是成功_嫦娥五号发射升空成功!!!

嫦娥五号探测器发射成功1聚焦发射当时2020年11月24日4时30分,我国在中国文昌航天发射场,用长征五号遥五运载火箭成功发射探月工程嫦娥五号探测器,火箭飞行约2200秒后,顺利将探测器送入预定轨道,开启我国首次地外天体采…

基于php的外卖订餐系统开题报告_订餐系统开题报告.doc

订餐系统开题报告订餐系统开题报告附件6:广东工商职业学院毕业设计(论 文)开题报告题目校园订餐系统设计与实现系 (部)计算机应用技术系专业班级姓名学号指导老师2015年10月30日毕业设计(论文)开题报告题目校园订餐系统设计与实现时间2015年10月30日至2015年11月10日…

荣耀v40搭载鸿蒙吗,荣耀V40照常发布,将更换操作系统,同nova8搭载鸿蒙2.0发布...

荣耀系列手机的发布节奏有一定程度的变动,例如荣耀Magic3发布推迟,但是根据消息称,荣耀V40还会照常发布。根据目前华为内部关于麒麟9000的分配来看,主要还是对Mate40和P40使用,其他型号中:nova8 Pro 、荣耀…

chrome java插件_Java程序员喜欢的10款软件里有你在用的吗?

作为一名Java程序员,日常开发的过程中,我们需要借助很多工具来进行编码。好的工具可以极大的提升程序员的工作效率,今天我们来认识下大多数程序员喜欢的10款软件。持不同意见或有想要补充的小伙伴,欢迎评论区交流哦~VSCODE不管你是…

transmac使用方法_Mac苹果电脑降级方法?

最近Mac OS升级到最新系统(Catalina 10.15 19A583)后,出现了各种奇葩问题,更关键的是,很多常用(专业)软件不能使用了,这让大家真的是焦头烂额。如果你笔记本电脑能够正常联网其实,Mac系统本身是提供了一个快速恢复系统…

android 网络连接 网络是否可用,Android 使用ping判断网络/WIFI连接是否可用

最近项目中有一个网络判断的需求,因为终端只能连接wifi,wifi即使连接上也可能会出现不能连接网络的问题,所以需要进行网络连接的判断。ping的相关知识使用ping检验网络是否可以连接ping就是检测客户端是否可以上网。那么我们就上代码该段代码…

android 富文本框架_当微擎框架遇上uniapp,以一当十同时开发十个平台项目

随着各类平台异军突起,流量也越来越分散。为了适应时代的发展,不少公司在做产品项目的时候,需要例如网站、公众号、H5、微信小程序、抖音小程序、支付宝小程序、百度小程序、360小程序、快应用、安卓app、苹果app的需求。这么多平台&#xff…

mesh 协调器 路由器_关于Mesh网络中,协调器和路由器之间的几个问题?

1,由于我所搭建的整个网络是Mesh网络,不牵涉到低功耗的情况,所以网络中只有两种类型的设备:协调器和路由器即:1个协调器N个路由器2,为了防止协调器在掉电的情况下路由器去维持整个网络,这样协调…

html5写入唯一标识,id - 唯一标识符 - html5全局属性

idid全局属性定义唯一标识符(ID),该标识符在整个文档中必须是唯一的。其目的是在链接(使用片段标识符),脚本或样式(使用CSS)时标识元素。示例A normal, boring paragraph. Try not to fall asleep.The most exciting paragraph on the page. One of a ki…

python 文本相似度_【机器学习】使用gensim 的 doc2vec 实现文本相似度检测

环境 Python3, gensim,jieba,numpy ,pandas 原理:文章转成向量,然后在计算两个向量的余弦值。 Gensim gensim是一个python的自然语言处理库,能够将文档根据TF-IDF, LDA, LSI 等模型转化成向量模…

list的exc_集合框架

List是有序的Collection,使用此接口能够精确的控制每一个元素的插入位置,及使用索引访问List中的元素,List存储元素是有序的、可重复。除了具备Collection接口必备的Iterator()方法外,List还提供了listIterator()方法返回一个List…

html鼠标经过的特效代码,使用mouse事件实现简单的鼠标经过特效

代码超级简单,这里就不多BB了,直接奉上Documentbody,ul,li{margin:0; padding:0; list-style:none}ul li{width:100px; height:100px; border:1px solid #f00; float:left; margin:50px 10px; background-color:#ffffff;}ul li.current{border:1px solid…

ubuntu tomcat上传目录权限_等了 3 年,Ubuntu Studio 终于有权限上传更新包

Ubuntu 的衍生版本 Ubuntu Studio 终于选出了两位具有上传更新包权限的开发者。此前就有媒体报导过,Ubuntu Studio 19.04 版本可能会流产,而原因很让人诧异:社区里没有任何一位开发者具有上传更新包的权限。随后 Ubuntu Studio 委员会主席 Er…

log中文乱码 springboot_springboot + shiro 权限注解、统一异常处理、请求乱码解决

springboot shiro 权限注解、统一异常处理、请求乱码解决前篇后台权限管理系统20200808新版本更新版本升级及内容优化版本,改动内容:版本更新,springboot从1.5升级到2.1;权限缓存使用redis;验证码使用redis&#xff1…

html表格横向竖向滚动,利用纯css实现table固定列与表头中间横向滚动的思路和实例...

前言最近在做的后台管理系统要处理大量的表格,因为原项目是采用的for循环加拼接字符串的方式实现;导致js代码一大堆;各种单引号和双引号的嵌套;让人头疼;遂引入vue.js;用v-for做模板渲染;工作量顿时减轻不少,心情舒畅;文字被强制换行了由于个别表的列数较多;文字都挤…

android判断主线程_android中从子线程切换到主线程,但是显得代码很臃肿,请教大牛是怎么自定义的?...

小弟新手一枚,我先来说说我自己在项目中的做法。因为小弟只有JAVAWEB的基础所以只能使用线程池来处理线程之间的切换1.为了使APP不出现卡顿和内存的低消耗。我是用了synchronized 和用一个Map 来限定每次只能运行一条子线程,Map 键:TAG 线程任…

python十进制转二进制循环_python十进制转二进制的详解

python十进制转二进制 python中十进制转二进制使用 bin() 函数。 bin() 返回一个整数 int 或者长整数 long int 的二进制表示。 下面是使用示例: >>>bin(10) 0b1010 >>> bin(20) 0b10100 补充:十进制转8进制和16进制的方法&#xff1a…

计算机主机硬件图片,电脑主机内部有哪些硬件

电脑主机内部有哪些硬件电脑主机里的硬件都有哪些呢,你知道吗?下面将由小编带大家来解答这个疑问吧,希望对大家有所收获!从主机外部看硬件从外边看,主机就是一个扁扁方方的铁盒子,但很多朋友确没有真正了解过它内部到底是什么样子…

springboot profile_SpringBoot简单配置

使用Spring Boot,配置工作将会变得更加简单,我们只需要在application.properties中定义属性,然后在代码中直接使用Value注入即可。 如下:book.authorxxxbook.nameyyy book.pinyin测试这里专门设置了中文,因为中文不做特…