扒了插件市场的uni-start,抽出来的简单的路由拦截功能。

项目结构
|--|-- App.vue|-- index.html|-- main.js|-- manifest.json|-- pages.json|-- uni.scss|-- .hbuilderx|   |-- launch.json|-- api # api文件|-- components # 自定义组件,按照格式:组件名/组件名.vue,使用组件时无需引入,直接使用即可|-- pages  # 页面|-- static # 静态资源|-- store # vuex存储|   |-- getters.js|   |-- index.js|   |-- modules|       |-- app.js|       |-- user.js|-- styles # 样式文件|   |-- theme.scss|-- uni_modules # ui组件|-- utils|-- auth.js # 权限存储函数|-- constant.js # 常量,如api前缀|-- index.js # 公共方法|-- mixin.js # mixin,主题切换、登录校验|-- permission.js # 路由拦截|-- request.js # 请求拦截,请求响应统一处理|-- vue.config.js # 处理跨域
auth.js
/*** @description 权限存储函数*/
const authorizationKey = 'Authorization'export function getAuthorization() {return uni.getStorageSync(authorizationKey)
}export function setAuthorization(authorization) {return uni.setStorageSync(authorizationKey, authorization)
}export function removeAuthorization(authorization) {return uni.removeStorageSync(authorizationKey)
}
permission.js

未登录时对路由进行拦截,白名单不拦截

/*** @description 自定义路由拦截*/import { getAuthorization } from '@/utils/auth'// 白名单
const whiteList = ['/', // 注意入口页必须直接写 '/'{ pattern: /^\/pages\/list.*/ }, // 支持正则表达式'/pages/grid/grid','/pages/user-center/user-center',{ pattern: /^\/pages\/login\/*/ }
]export default async function() {const list = ['navigateTo', 'redirectTo', 'reLaunch', 'switchTab']// 用遍历的方式分别为,uni.navigateTo,uni.redirectTo,uni.reLaunch,uni.switchTab这4个路由方法添加拦截器list.forEach(item => {uni.addInterceptor(item, {invoke(e) {// 获取要跳转的页面路径(url去掉"?"和"?"后的参数)const url = e.url.split('?')[0]console.log('url', url)// 判断当前窗口是白名单,如果是则不重定向路由let passif (whiteList) {pass = whiteList.some((item) => {if (typeof (item) === 'object' && item.pattern) {return item.pattern.test(url)}return url === item})}// 不是白名单并且没有tokenif (!pass && !getAuthorization()) {uni.showToast({title: '请先登录',icon: 'none'})uni.navigateTo({url: "/pages/login/login"})return false}return e},fail(err) { // 失败回调拦截console.log(err)}})})
}
APP.vue
<script>
import routingIntercept from '@/utils/permission.js'
export default {globalData: {searchText: ''},onLaunch: function() {// 对路由进行统一拦截,实现路由导航守卫 router.beforeEach 功能routingIntercept()},onShow: function() {console.log('App Show')},onHide: function() {console.log('App Hide')}
}
</script><style>/*每个页面公共css */
</style>

uniapp通过uni.addInterceptor实现路由拦截功能相关推荐

  1. vue vue-router实现路由拦截功能

    vue vue-router实现路由拦截功能 1.目录结构 2.设置路由拦截. 路由配置如下,在这里自定义了一个对象的参数meta: {authRequired: true}来标记哪些路由是需要登录验 ...

  2. react实现路由跳转拦截功能(导航守卫)

    react实现路由跳转拦截功能(导航守卫) 背景 方法1:通过Prompt组件实现react路由跳转拦截功能 Prompt组件介绍 Prompt组件示例 自定义Prompt组件的提示弹窗 方法2:通过 ...

  3. uniapp实现微信小程序登录注册功能

    利用uniapp的uni.login()函数实现登录功能uni.login(OBJECT) | uni-app官网 <script>// 用户登录获取用户信息接口import {login ...

  4. uni.request请求响应拦截封装

    新建request.js文件 uni.addInterceptor('request', {invoke(args) {//拦截前触发let baseUrl = "https://www.x ...

  5. UNIAPP实战项目笔记28 商品分享功能点分享按钮分享到微信好友

    UNIAPP实战项目笔记28 商品分享功能点分享按钮分享到微信好友 detail.vue 加生命周期 // 点击分享onNavigationBarButtonTap(e) {if(e.type===' ...

  6. uniapp实现简单的音乐播放器功能

    uniapp实现简单的音乐播放器功能 问题描述: 创建并返回内部audio上下文来控制音乐播放 我是直接用scroll-into-view来实现的这个 <scroll-view scroll-y ...

  7. vue项目某个APP页面实现手机物理按键返回、路由拦截、localStorage存取参数

    vue项目某个APP页面实现手机物理按键返回.路由拦截.localStorage存取参数 最近做个功能:在web系统里面嵌套两个app页面,当然APP页面在web系统上没有路由跳转,而是从另外系统扫码 ...

  8. react-router v6 路由统一管理及路由拦截方案

    2022-03-11 更新: 升级插件至1.1.3版本,支持 TypeScript. 2022-03-02 更新: 修复项目打包后可能无法加载路由的问题:升级插件至1.0.0版本,该版本使用方式上有差 ...

  9. uni-app:实现页面未登录时拦截,弹出‘请先登录提示’

    uni-app:实现页面未登录时拦截,弹出'请先登录提示' 首先我的接口是封装好的,如图所示: 若需要判断是否登录,只需将auth改为true auth: true 在index.js中添加逻辑 我是 ...

最新文章

  1. 【数据结构】回顾散列表
  2. HRBUST 2072 树上求最大异或路径值
  3. java编程中的di是什么_java-在Spring IoC / DI中使用@Component注释对接口...
  4. python圆形_Python中的圆形范围
  5. 反转!Python再次卫冕2020年编程榜,Java和C回落,你怎么看?​
  6. java springmvc https_【Java Web开发学习】Spring MVC 使用HTTP信息转换器
  7. Windows Server 8 Tips (二) Hyper-V 3:用PowerShell导出和导入虚拟机
  8. WordPress 插件机制的简单用法和原理(Hook 钩子)
  9. react学习笔记--一--移动端项目搭建
  10. 如何用java实现阶乘倒数求和_JAVA 阶乘 的倒数求和public class Jiecheng {public static void main(...
  11. 还在纠结报表工具选型吗
  12. OpenSSL源码分析—MD4算法实现
  13. sql与hsql的区别以及分别怎么用!
  14. 微信html5 video自动播放,【微信H5开发】audio/video标签的自动播放
  15. [幽默小故事大道理]励志幽默小故事大道理20个
  16. MySQL和Navicat基本使用
  17. HZNU2012图解
  18. Excel中ISEVEN函数用法之判断数值奇偶性
  19. 公众号如何用微信红包吸粉而不被封号?实战24天10万粉
  20. apache 在windows下无法启动的一个错误

热门文章

  1. 实值遗传算法求解函数极值问题(基于MATLAB)
  2. 537-C++多态和抽象类
  3. ERP与MRPⅡ的区别
  4. OSError: [Errno 22] Invalid argument: 'E:\\DESK\x08ank dataset\train_set.csv'
  5. uniapp——ios跳转小程序每次都显示正在连接问题
  6. uboot中利用TFTP和NFS加载镜像到ram运行
  7. 滁州学院计算机最低分数线,2021年滁州学院最低投档分数线及录取位次
  8. idea中maven依赖引入不进来解决方法
  9. html页面点击图片名称查看图片------图片预览插件viewer.js使用
  10. 【echarts】横向柱状图(条形图)渐变色,手把手教学