uniapp实现路由拦截——实战案例(二)

uniapp如何实现登录路由拦截?

今天再次介绍一下 uni-simple-router 插件,记得最初使用时,是在三年以前了,这里简单介绍通过自动读取 pages.json 作为路由表的方式,欢迎指教~


文章目录

    • uniapp如何实现登录路由拦截?
      • 快速上手,实现登录的路由拦截
      • 效果图
      • 路由守卫效果图
      • 修改相关文件
        • pages.json
        • router.js
        • index.vue
        • login.vue
      • 路由传参
        • 路由跳转方式
        • uni 传参方式
        • query 传参方式
        • params 传参方式
        • 注意

上一篇介绍.基本路由配置


快速上手,实现登录的路由拦截

效果图

在这里插入图片描述


路由守卫效果图

router.beforeEachtofrom 数据结构

  • App

在这里插入图片描述


  • 微信小程序
    在这里插入图片描述

  • H5

在这里插入图片描述


修改相关文件

  • 在上一篇.基本配置.基础上修改请查看

pages.json
  • name 路由名称,例:通过 命名路由 方式跳转时使用;
  • needLogin 表示 需要登录
{
	"pages": [
		{
			"path": "pages/index/index",
			"style": {
				"navigationBarTitleText": "simple-router"
			},
			"aliasPath": "/",
			"name": "index",
			"meta": {
				"needLogin": false
			}
		},
		{
			"path": "pages/deviceList/deviceList",
			"style": {
				"navigationBarTitleText": "设备列表"
			},
			"name": "deviceList",
			"meta": {
				"needLogin": true
			}
		},
		{
			"path": "pages/login/login",
			"style": {
				"navigationBarTitleText": "登录"
			},
			"name": "login",
			"meta": {
				"needLogin": false
			}
		},
		{
			"path": "pages/404/index",
			"style": {
				"navigationBarTitleText": "404"
			},
			"name": "404",
			"meta": {
				"needLogin": false
			}
		}
	],
	"globalStyle": {
		"navigationBarTextStyle": "black",
		"navigationBarTitleText": "simple-router",
		"navigationBarBackgroundColor": "#F8F8F8",
		"backgroundColor": "#F8F8F8"
	}
}

router.js
  • 在全局路由守卫中beforeEach,处理登录逻辑
  • to: 将要跳转的目标路由
  • from: 从哪里来,来源路由
  • next:next是个拦截函数
    • next() 无参数时,表示正常放行
    • next(false) 表示阻止通行,此时不能跳转
    • next(‘/’) 里面参数也可以是新路径,此时就会跳转到新路径
  • 注意: 你可以会遇到无法获取 meta 的问题,需要在 vue.config.jsincludes 中 添加 meta

import {
	RouterMount,
	createRouter
} from 'uni-simple-router'

const router = createRouter({
	platform: process.env.VUE_APP_PLATFORM,
	routes: [
        ...ROUTES,
        {
			path: '*',
			redirect: (to) => {
				return {
					name: '404'
				}
			}
		}
	]
})

// 全局路由前置守卫
router.beforeEach((to, from, next) => {
	// 判断是否已登录过,已登录直接 next
	const token = getToken(); // 获取 TOKEN,修改为自己方法
	if (token) {
		next();
		return;
	}
	
    // 判断是否需要登录
	if (to.meta.needLogin) {
		next({
			name: 'login',
			params: { // 路由参数
				jumpPath: to.fullPath // 完整路径
			}
		})
	} else {
		next();
	}
})

// 全局路由后置守卫
router.afterEach((to, from) => {
	console.log('跳转结束');
})

export {
	router,
	RouterMount
}

index.vue
<button type="primary" @click="routerTap">路由拦截</button>
routerTap() {
	uni.navigateTo({
		url: 'pages/deviceList/deviceList'
	})
}

login.vue
  • 在登录页面,接收参数;
onLoad(options) {
	console.log('options:', options);
	if (options.jumpPath) this.jumpPath = decodeURIComponent(options.jumpPath);
}

  • 处理 登录成功后,跳转 目标页面;
  • 判断 路径是否来源 tabBar 执行不同跳转方式;
if (this.jumpPath) {
	let tmpBack = this.jumpPath;
	let tmpSplitVal = tmpBack.split('?')[0]; // 通过遍历 tabbarList 方式也是可以的
	let tabbarList = ['/pages/index/index', '/pages/setting/setting', '/pages/user/user'];
	if (tabbarList.indexOf(tmpSplitVal) != -1) {
		uni.switchTab({
			url: tmpBack
		})
	} else {
		uni.redirectTo({
			url: tmpBack
		})
	}
} else { // 没有参数,默认跳转所需页面 例:
	uni.redirectTo({
		url: '/pages/deviceList/deviceList'
	})
}

路由传参

路由跳转方式
  • push
  • pushTab:跳转 tabBar
  • replace:替换
  • replaceAll:替换所有
  • back:返回第几层(数字)

uni 传参方式
uni.navigateTo({
	url: 'pages/login/login?name=smile'
})

query 传参方式
this.$Router.push({
	path: '/pages/login/login',
	query: {
		name: 'smile'
	}
})

params 传参方式
this.$Router.push({
	name: 'login',
	params: {
		name: '小不点~'
	}
})

注意
  • pathquery 配对使用
  • nameparams 配对使用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

哪些数据管理知识领域需要做到数据全生命周期管理

一、数据生命周期 数据管理、数据治理、数据安全、元数据管理、数据治理等知识领域,都需要按照数据的生命周期开展管理工作。数据生命周期包括计划、设计/启用、创建/获取、存储/维护、使用、增强和处置。详见下图。 1.数据治理生命周期 1)规划:将数据要求与业务战略连接起…

关于小程序测试账号如何移除

关于小程序测试账号如何移除 有很多小伙伴一开始做开发,一开始用来做测试号,登录微信公众号的时候会提示配置项, 那么如何移除掉呢 https://mp.weixin.qq.com/ 关注「公众平台安全助手」公众号 -> 绑定查询 -> 微信号绑定账号 -> 小程序 -> 点击小程序 -> 解除…

ByteTrack

1. 论文中伪代码表示的流程图 2. 简要版 此图源自&#xff1a; ByteTrack多目标跟踪原理&#xff0c;白老师人工智能学堂 3. 详细版 根据ByteTrack-CPP-ncnn代码的数据流画的较为详细的流程图&#xff1a; 4. ByteTrack-CPP-ncnn的UML类图 Reference ByteTrack多目标跟踪原…

Qt状态机框架

概述 状态机框架提供了用于创建和执行状态图的类。这些概念和符号基于Harel的Statecharts:复杂系统的可视化形式(http://www.wisdom.weizmann.ac.il/~dharel/SCANNED.PAPERS/Statecharts.pdf)&#xff0c;也是UML状态图的基础。状态机执行的语义基于状态图XML (SCXML)(http://…

消息队列-分布式消息队列技术选型

Kafka Kafka 是 LinkedIn 开源的一个分布式流式处理平台&#xff0c;已经成为 Apache 顶级项目&#xff0c;早期被用来用于处理海量的日志&#xff0c;后面才慢慢发展成了一款功能全面的高性能消息队列。 流式处理平台具有三个关键功能&#xff1a; 消息队列&#xff1a;发布和…

SQLServer使用 PIVOT 和 UNPIVOT行列转换

在SQL Server中&#xff0c;PIVOT是一个用于将行数据转换为列数据的操作。它特别适用于将多个行中的值转换为多个列的情况&#xff0c;并在此过程中执行聚合操作。以下是关于SQL Server中PIVOT操作的详细解释和示例&#xff1a; 1、本文内容 概述语法备注关键点简单 PIVOT 示…

Linux命令2

文章目录 移动文件或目录mv格式 查找命令/文件存放位目录置which格式 查找文件或目录find格式查找类型多个查找条件逻辑运算符 移动文件或目录 mv 将文件或者目录移动到指定的位置 如果目标的位置和源位置相同&#xff0c;相当于改名操作 跨目录移动相当于window的剪切 格式…

MacOS之解决:开盖启动问题(七十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

2024.6.16周报

目录 摘要 ABSTRACT 一、文献阅读 一、题目 二、摘要 三、创新点 四、模型架构 五、文章解读 1、Introduction 2、实验 3、结论 二、代码复现 1、模型代码 2、实验结果 三、总结 摘要 本周我阅读了一篇题目为《Contaminant Transport Modeling and Source Att…

工厂方法模式实战之某商场一次促销活动

目录 1.5.1、前言1.5.2、实战场景简介1.5.3、开发环境1.5.4、用传统的if-else语句实现1.5.4.1、工程结构1.5.4.2、if-else需求实现1.5.4.3、测试验证 1.5.5、工厂模式优化代码1.5.5.1、工程结构1.5.5.2、代码实现1.5.5.2.1、定义各种商品发放接口及接口实现1.5.5.2.2、定义工厂…

项目经理,请勇敢Say No~

为什么要say no&#xff1f; 培养say no的勇气 优雅的say no&#xff01; say no 三部曲&#xff0c;项目经理&#xff0c;你准备好了吗&#xff1f; 为什么要say no&#xff1f; 保护项目完整性的屏障 项目管理的核心在于平衡时间、成本与质量三大要素&#xff0c;任何一项的…

STL——set、map、multiset、multimap的介绍及使用

文章目录 关联式容器键值对树形结构与哈希结构setset的介绍set的使用set的模板参数列表set的构造set的使用set的迭代器使用演示 multisetmultiset演示 mapmap的定义方式map的插入map的查找map的[ ]运算符重载map的迭代器遍历multimapmultimap的介绍multimap的使用 在OJ中的使用…

全球“抱团”美股,美股“抱团”AI

内容提要 过去一个月内&#xff0c;全球约有300亿美元新资金流入股票基金&#xff0c;其中高达94%投向了美国资产&#xff1b;一季度&#xff0c;海外投资者购入了1870亿美元美国公司债券&#xff0c;同比增长61%。 文章正文 尽管美国面临债务问题和大选带来的政治分歧&#…

索引-定义、创建(CREATE INDEX)、删除(DROP INDEX)

一、概述 1、索引是SQL语言定义的一种数据对象&#xff0c;是大多数DBMS为数据库中基本表创建的一种辅助存取结构&#xff0c;用于响应特定查询条件进行查询时的查询速度&#xff0c;DBMS根据查询条件从数据库文件中&#xff0c;选择出一条或者多条数据记录以供检索&#xff0…

【JS重点17】原型继承

目录 一&#xff1a;什么是原型继承 二&#xff1a;通过赋值方式实现原型继承 三&#xff1a;通过构造函数实现原型继承 四&#xff1a;如何赚钱 一&#xff1a;什么是原型继承 通过往构造函数上的原型对象添加属性和方法&#xff0c;再new一个实例对象&#xff0c;从而实例…

18. 第十八章 继承

18. 继承 和面向对象编程最常相关的语言特性就是继承(inheritance). 继承值得是根据一个现有的类型, 定义一个修改版本的新类的能力. 本章中我会使用几个类来表达扑克牌, 牌组以及扑克牌性, 用于展示继承特性.如果你不玩扑克, 可以在http://wikipedia.org/wiki/Poker里阅读相关…

CSS期末复习速览(二)

1.元素显示模式分为三种&#xff1a;块元素&#xff0c;行内元素&#xff0c;行内块元素 2.块元素&#xff1a;常见的块元素&#xff1a;<h1>~<h6> <p> <div> <ul> <ol> <li>&#xff0c;特点&#xff1a;自己独占一行&a…

需求:如何给文件添加水印

今天给大家介绍一个简单易用的水印添加框架&#xff0c;框架抽象了各个文件类型的对于水印添加的方法。仅使用几行代码即可为不同类型的文件添加相同样式的水印。 如果你有给PDF、图片添加水印的需求&#xff0c;EasyWatermark是一个很好的选择&#xff0c;主要功能就是传入一…

嵌入式实训day5

1、 from machine import Pin import time # 定义按键引脚控制对象 key1 Pin(27,Pin.IN, Pin.PULL UP) key2 Pin(26,Pin.IN, Pin.PULL UP)led1 Pin(15,Pin.ouT, value0) led2 Pin(2,Pin.ouT, value0) led3 Pin(0,Pin.ouT, value0) # 定义key1按键中断处理函数 def key1 ir…

2.线上论坛项目

一、项目介绍 线上论坛 相关技术&#xff1a;SpringBootSpringMvcMybatisMysqlSwagger项目简介&#xff1a;本项目是一个功能丰富的线上论坛&#xff0c;用户可编辑、发布、删除帖子&#xff0c;并评论、点赞。帖子按版块分类&#xff0c;方便查找。同时&#xff0c;用户可以…