Vue2(路由)
目录
- 一,路由原理(hash)
- 二,路由安装和使用(vue2)
- 三,路由跳转
- 四,路由的传参和取值
- 五,嵌套路由
- 六,路由守卫
- 最后
一,路由原理(hash)
单页应用的路由模式有两种
1、哈希模式(利用hashchange 事件监听 url的hash 的改变)
2、history模式(使用此模式需要后台配合把接口都打到我们打包后的index.html上)
hash模式的原理:
核心是锚点值的改变,我们监听到锚点值改变了就去局部改变页面数据,不做跳转。跟传统开发模式url改变
后立刻发起请求,响应整个页面,渲染整个页面比路由的跳转用户体验更好
演示1
二,路由安装和使用(vue2)
导入路由插件
<script src="../js/vue-router.js"></script>
安装路由插件到Vue中
Vue.use(VueRouter);
创建VueRouter对象
// 路由的安装 前提是要导入路由jsVue.use(VueRouter)// 创建一个登录子组件var login = {template:`<div>登录页面 </div>`,}// 创建路由配置实例,主要实现,路劲和子组件之间的映射var myrouter = new VueRouter({routes:[{path:'/login/id',name:'login',component:login},]})
使用路由
<body><div id="app">头部<!-- 下面是路由出口 --><router-view></router-view>尾部</div>
</body>
<script src="../Vue2/js/vue2.7.js"></script>
<script src="../Vue2/js/vue-router.js"></script>
<script>// 路由的安装 前提是要导入路由jsVue.use(VueRouter)// 创建一个登录子组件var login = {template:`<div>个人页面 </div>`,}// 创建路由配置实例,主要实现,路劲和子组件之间的映射var myrouter = new VueRouter({routes:[{path:'/login',name:'login',component:login},]})var app = new Vue({el:'#app',data(){return{}},router:myrouter,})</script>
示例2
三,路由跳转
路由的跳转有两种方式:
使用标签
<router-link to="/login">登录</router-link>
编程式路由,使用js
this.$router.push({path:'/login'});
this.$router.replace({path:'/login'});
说明:
1.this.$router.push(); 会向history中添加记录
2.this.$router.replace();不会向history中添加记录。
3.this.$router.go(-1)常用来做返回上一个地址。
路由中的对象:
1.this.$route 路由信息对象,只读。
2.this.$router 路由操作对象,只写。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div id="app">头部<router-link to="/login">登录</router-link><router-link to="/person">个人</router-link><button @click="toxiaohao">api 王导</button><!-- 下面是路由出口 --><router-view></router-view>尾部</div>
</body>
<script src="../Vue2/js/vue2.7.js"></script>
<script src="../Vue2/js/vue-router.js"></script>
<script>// 路由的安装 前提是要导入路由jsVue.use(VueRouter)// 创建一个登录子组件var login = {template:`<div>登录页面 </div>`,}// 创建一个登录子组件var person = {template:`<div> 个人页面 </div>`,}// 创建一个个人页面子组件var xiaohao = {template:`<div>王导页面 </div>`,}// 创建路由配置实例,主要实现,路劲和子组件之间的映射var myrouter = new VueRouter({routes:[{path:'/login',name:'login',component:login},{path:'/person',name:'person',component:person},{path:'/xiaohao',name:'xiaohao',component:xiaohao}]})var app = new Vue({el:'#app',data(){return{}},router:myrouter,methods:{toxiaohao(){this.$router.replace({path:'/xiaohao'})},}})</script>
</html>
示例3
四,路由的传参和取值
查询参
配置。查询参可以和path属性匹配,也可以和name属性匹配。
<router-link :to="{path:'/login',query:{id:queryid}}"></router-link>
或者
<router-link :to="{name:'login',query:{id:queryid}}"></router-link>
或者
this.$router.push({path:'/login',query:{id:queryid}});
取参
// 此代码可以写到组件的钩子函数中
this.$route.query.id
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div id="app">头部<router-link :to="{path:'login',query:{id:loginId}}">带参数登录</router-link><router-link :to="{name:'person',query:{id:personId}}">带参数个人</router-link><button @click="clxiaodao">带参数王导</button><!-- 下面是路由出口 --><router-view></router-view>尾部</div>
</body>
<script src="../Vue2/js/vue2.7.js"></script>
<script src="../Vue2/js/vue-router.js"></script>
<script>// 路由的安装 前提是要导入路由jsVue.use(VueRouter)// 创建一个登录子组件var login = {template:`<div>登录页面 </div>`, mounted(){console.log(this.$route.query.id);},}// 创建一个登录子组件var person = {template:`<div> 个人页面 </div>`,mounted(){console.log(this.$route.query.id);}, }// 创建一个个人页面子组件var xiaodao = {template:`<div>王导页面 </div>`,mounted(){console.log(this.$route.query.id);},}// 创建路由配置实例,主要实现,路劲和子组件之间的映射var myrouter = new VueRouter({routes:[{path:'/login',name:'login',component:login},{path:'/person',name:'person',component:person},{path:'/xiaodao',name:'xiaodao',component:xiaodao}]})var app = new Vue({el:'#app',data(){return{loginId:1,personId:2,xiaodaoId:3}},router:myrouter,methods:{clxiaodao(){this.$router.push({path:'/xiaodao',query:{id:this.xiaodaoId}})},}})</script>
</html>
示例4
路由参
配置路由规则
var router = new VueRouter({routers:[// 需要在配置路由规则时,使用冒号指定参数{name:'login',path:'/login/:id',component:LoginVue}]
});
配置。意:在这里path和params两个参数不能同时使用
<router-link :to="{name:'login',params:{id:paramId}}"></router-link>
或者
this.$router.push({name:'login',params:{id:this.paramId}});
取参
this.$route.params.id;
注意:相同路由,但参数不同。造成页面不刷新的问题。
<router-view :key="$route.fullPath"></router-view>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div id="app">头部<router-link :to="{name:'login',params:{id:loginId}}">路由登录</router-link><router-link :to="{name:'person',params:{id:personId}}">路由个人</router-link><button @click="apixiaodao">api路由 王导</button><!-- 下面是路由出口 --><router-view></router-view>尾部</div>
</body>
<script src="../Vue2/js/vue2.7.js"></script>
<script src="../Vue2/js/vue-router.js"></script>
<script>// 路由的安装 前提是要导入路由jsVue.use(VueRouter)// 创建一个登录子组件var login = {template:`<div>登录页面 </div>`, mounted(){console.log(this.$route.params.id);}}// 创建一个登录子组件var person = {template:`<div> 个人页面 </div>`,mounted(){console.log(this.$route.params.id);}}// 创建一个个人页面子组件var xiaodao = {template:`<div>王导页面 </div>`,mounted(){console.log(this.$route.params.id);}}// 创建路由配置实例,主要实现,路劲和子组件之间的映射var myrouter = new VueRouter({routes:[{path:'/login/id',name:'login',component:login},{path:'/person/id',name:'person',component:person},{path:'/xiaodao/id',name:'xiaodao',component:xiaodao}]})var app = new Vue({el:'#app',data(){return{loginId:1,personId:2,xiaodaoId:3}},router:myrouter,methods:{apixiaodao(){this.$router.push({name:'xiaodao',params:{id:this.xiaodaoId}})}}})</script>
</html>
示例5
五,嵌套路由
1.路由间有层级关系。他们在模板中也有嵌套关系。
2.可以一次性配置多个路由。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div id="app"><router-view :key="$route.fullPath"></router-view></div>
</body>
<script src="../Vue2/js/vue2.7.js"></script>
<script src="../Vue2/js/vue-router.js"></script>
<script>// 路由的安装 前提是要导入路由jsVue.use(VueRouter)// 导航子组件,一级路由var nav = {template:`<div><router-link :to="{name:'nav.index'}">首页</router-link> <router-link :to="{name:'nav.person'}">个人中心</router-link> <router-link :to="{name:'nav.message'}">消息</router-link> <router-view></router-view> </div>`}// 首页子组件,二级路由var index = {template:`<div>首页 </div>`}// 个人中心子组件,二级路由var person = {template:`<div>个人中心 </div>`}// 消息子组件,二级路由var message = {template:`<div>消息 </div>`}var router = new VueRouter({routes:[{path:'/nav/',name:'nav',component:nav,children:[{path:'',redirect:'/nav/index'}, {path:'index',name:'nav.index',component:index},{path:'person',name:'nav.person',component:person},{path:'message',name:'nav.message',component:message},]},{path:'',redirect:'/nav'}]})var app = new Vue({el:'#app',router,})</script>
</html>
示例六
六,路由守卫
可以做验证判断
使用路由的钩子函数beforeEach实现
mounted(){this.$router.beforeEach((to,from,next)=>{console.log(to);if(to.path=='/index'){next();}else{setTimeout(()=>{next()},2000)}})}
完整代码
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div id="app"><router-view :key="$route.fullPath"></router-view></div>
</body>
<script src="../Vue2/js/vue2.7.js"></script>
<script src="../Vue2/js/vue-router.js"></script>
<script>// 路由的安装 前提是要导入路由jsVue.use(VueRouter)// 导航子组件,一级路由var nav = {template:`<div><router-link :to="{name:'nav.index'}">首页</router-link> <router-link :to="{name:'nav.person'}">个人中心</router-link> <router-link :to="{name:'nav.message'}">消息</router-link> <router-view></router-view> </div>`}// 首页子组件,二级路由var index = {template:`<div>首页 </div>`}// 个人中心子组件,二级路由var person = {template:`<div>个人中心 </div>`}// 消息子组件,二级路由var message = {template:`<div>消息 </div>`}var router = new VueRouter({routes:[{path:'/nav/',name:'nav',component:nav,children:[{path:'',redirect:'/nav/index'}, {path:'index',name:'nav.index',component:index},{path:'person',name:'nav.person',component:person},{path:'message',name:'nav.message',component:message},]},{path:'',redirect:'/nav'}]})var app = new Vue({el:'#app',router,mounted(){this.$router.beforeEach((to,from,next)=>{console.log(to);if(to.path=='/index'){next();}else{setTimeout(()=>{next()},2000)}})}})</script>
</html>
最后
送大家一句话:半山腰总是挤的你要去山顶看看!!!
相关文章:
Vue2(路由)
目录 一,路由原理(hash)二,路由安装和使用(vue2)三,路由跳转四,路由的传参和取值五,嵌套路由六,路由守卫最后 一,路由原理(hash&#…...

中介者模式-协调多个对象之间的交互
在深圳租房市场,有着许多的“二房东”,房主委托他们将房子租出去,而租客想要租房的话,也是和“二房东”沟通,租房期间有任何问题,找二房东解决。对于房主来说,委托给“二房东”可太省事了&#…...

Python框架【自定义过滤器、自定义数据替换过滤器 、自定义时间过滤器、选择结构、选择练习、循环结构、循环练习、导入宏方式 】(三)
👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误…...
红黑树遍历与Redis存储
引言 在计算机科学领域,红黑树(Red-Black Tree)是一种自平衡的二叉查找树,它能在O(log n)的时间复杂度内完成插入、删除和查找操作。由于其高效性和可预测性的性能,红黑树在许多领域都得到广泛应用。本文将重点介绍红…...

前端处理图片文件的方法
在项目开发过程中,有一个需求,需要前端对上传的图片进行处理,以字符串的形式传给后端,实现效果如下: 1.上传图片的组件 在该项目中,使用了element plus组件库 <el-uploadv-model:file-list"fileL…...
「Java」《深入解析Java多线程编程利器:CompletableFuture》
《深入解析Java多线程编程利器:CompletableFuture》 一、 引言1. 对多线程编程的需求和挑战的介绍2. 介绍CompletableFuture的作用和优势 二. CompletableFuture简介1. CompletableFuture是Java中提供的一个强大的多线程编程工具2. 与传统的Thread和Runnable相比的优…...

Docker容器与虚拟化技术:容器运行时说明与比较
目录 一、理论 1.容器运行时 2.容器运行时接口 3.容器运行时层级 4.容器运行时比较 5.强隔离容器 二、问题 1.K8S为何难以实现真正的多租户 三、总结 一、理论 1.容器运行时 (1)概念 Container Runtime 是运行于 k8s 集群每个节点中ÿ…...

vue导出文件流获取附件名称并下载(在response.headers里解析filename导出)
导出文件流下载,拦截器统一处理配置 需求以往实现的方法(各自的业务层写方法)现在实现的方法(axios里拦截器统一配置处理)把文章链接复制粘贴给后端,让大佬自己赏阅。 需求 之前实现的导出都是各自的业务层…...

山东省图书馆典藏《乡村振兴战略下传统村落文化旅游设计》鲁图中大许少辉博士八一新书
山东省图书馆《乡村振兴战略下传统村落文化旅游设计》鲁图中大许少辉博士八一新书...
2023-08-19力扣每日一题-水题/位运算解法
链接: 2235. 两整数相加 题意: ab 解: ab 补一个位运算写法,进位是(a&b)<<1,不进位的计算结果为a^b 实际代码: #include<iostream> using namespace std; int sum(int num1, int n…...

Hadoop学习:深入解析MapReduce的大数据魔力之数据压缩(四)
Hadoop学习:深入解析MapReduce的大数据魔力之数据压缩(四) 4.1 概述1)压缩的好处和坏处2)压缩原则 4.2 MR 支持的压缩编码4.3 压缩方式选择4.3.1 Gzip 压缩4.3.2 Bzip2 压缩4.3.3 Lzo 压缩4.3.4 Snappy 压缩4.3.5 压缩…...

LRU淘汰策略执行过程
1 介绍 Redis无论是惰性删除还是定期删除,都可能存在删除不尽的情况,无法删除完全,比如每次删除完过期的 key 还是超过 25%,且这些 key 再也不会被客户端访问。 这样的话,定期删除和堕性删除可能都彻底的清理掉。如果…...

Kotlin 高阶函数详解
高阶函数 在 Kotlin 中,函数是一等公民,高阶函数是 Kotlin 的一大难点,如果高阶函数不懂的话,那么要学习 Kotlin 中的协程、阅读 Kotlin 的源码是非常难的,因为源码中有太多高阶函数了。 高阶函数的定义 高阶函数的…...
DL——week2
要学明白的知识点: np.dot()的作用 两个数组的点积,即对应元素相乘 numpy.dot(a,b,outNone) a: ndarray 数组 b: ndarray 数组 out: ndarray, 可选,用来保存dot()的计算结果 numpy Ndarray对象 N维数组对象ndarray&am…...

如何撰写骨灰级博士论文?这是史上最全博士论文指导!
博士论文的写作是博士研究生主要要完成的工作。由于存在着较高的难度,较长的写作周期,以及在创新,写作规范,实际及理论意义等方面有着比较高的要求,博士论文的完成一般说来是有相当难度的。一篇好的博士论文不仅是一本…...

08.SpringBoot请求相应
文章目录 1 请求1.1 Postman1.2 简单参数1.2.1 原始方式1.2.2 SpringBoot方式1.2.3 参数名不一致 1.3 实体参数1.3.1 简单实体对象1.3.2 复杂实体对象 1.4 数组集合参数1.4.1 数组1.4.2 集合 1.5 日期参数1.6 JSON参数1.7 路径参数 2 响应2.1 ResponseBody注解2.2 统一响应结果…...

C#详解-Contains、StartsWith、EndsWith、Indexof、lastdexof
目录 简介: 过程: 举例1.1 举例1.2 总结: 简介: 在C#中Contains、StarsWith和EndWith、IndexOf都是字符串函数。 1.Contains函数用于判断一个字符串是否包含指定的子字符串,返回一个布尔值(True或False)。 2.StartsWith函数用于判断一…...
FATE框架中pipline基础教程
目录 1. 用pipline上传数据2. 用 Pipeline 进行 Hetero SecureBoost 的训练和预测3. 用 Pipeline 构建神经网络模型3.1 Homo-NN Quick Start: A Binary Classification Task3.2 Hetero-NN Quick Start: A Binary Classification Task 4. 自定义数据集示例:实现一个简…...

Atlas 元数据管理
Atlas 元数据管理 1.Atlas入门 1.1概述 元数据原理和治理功能,用以构建数据资产的目录。对这个资产进行分类和管理,形成数据字典。 提供围绕数据资产的协作功能。 表和表之间的血缘依赖 字段和字段之间的血缘依赖 1.2架构图 导入和导出࿱…...
编程题练习@8-23
分享8月23日两道编程题: 1 开幕式排列 题目描述 导演在组织进行大运会开幕式的排练,其中一个环节是需要参演人员围成一个环形。 演出人员站成了一圈,出于美观度的考虑,导演不希望某一个演员身边的其他人比他低太多或者高太多。 现…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...