Vue-route核心知识整理

目录

1 相关理解

1.1 对 vue-router 的理解

1.2 对 SPA 应用的理解

1.3 对路由的理解

1.3.1 什么是路由?

1.3.2 路由的分类

2 几个注意点

3 路由的基本使用

4 嵌套 (多级) 路由

5 路由传参

5.1 query 方式传参

5.1.1 跳转路由并携带query参数, to的字符串写法

5.1.2 跳转路由并携带query参数, to的对象写法

5.2 给路由命名

5.3 params方式传参

5.3.1 跳转路由并携带params参数, to的字符串写法

5.3.2 跳转路由并携带params参数, to的对象写法

5.4 props配置,实现传参

5.4.1 props配置方式1

5.4.2 props配置方式2

5.4.3 props配置方式3

6 路由的replace属性

7 路由的编程式导航

8 缓存路由组件

9 两个新的生命周期钩子

10 全局路由守卫(前置和后置路由守卫)

11 独享路由守卫

12 组件内守卫

13 路由的两种工作模式


1 相关理解

1.1 对 vue-router 的理解

是vue的一个插件库,专门用来实现SPA应用

1.2 对 SPA 应用的理解

1. 单页Web应用 (Single Page Web Application,  SPA)

2.  整个应用只有一个完整的页面

3. 点击页面的导航链接不会刷新页面,只会作页面的局部刷新

4. 数据需要通过 ajax请求获取

1.3 对路由的理解

1.3.1 什么是路由?

1. 一个路由就是一组映射关系 (key-value)

2. key为路径,value可能是function 或者 component

1.3.2 路由的分类

【1】后端路由

1)理解:value就是function,用于处理客户端提交的请求

2)工作过程:服务器接收到一个请求,根据请求的路径找到匹配的函数来处理请求,并返回响应的数据

【2】前端路由

1)理解:value就是component,用于展示页面内容

2)工作过程:当浏览器的路径发生改变时,对应的组件就会显示


2 几个注意点


3 路由的基本使用

【1】创建整个应用的路由器


 【2】在main.js入口文件中引入


【3】App组件


4 嵌套 (多级) 路由

【1】router文件夹下的index.js文件中


【2】Home组件中


5 路由传参

5.1 query 方式传参

【1】先写个三级路由,让其跳转到Detail组件


【2】利用 query 将Message组件中的数据传递给组件Detail中

在Message组件中:

5.1.1 跳转路由并携带query参数, to的字符串写法

对 to 进行数据绑定并使用模板字符串的写法

<template><div><ul><li v-for="m in messageList" :key="m.id"><!-- 跳转路由并携带query参数, to的字符串写法 --><router-link :to="`/home/message/detail?id=${m.id}&title=${m.title}`">{{m.title}}</router-link></li></ul><!-- 展示内容 --><router-view></router-view></div>
</template><script>export default {name: 'Message',data() {return {messageList: [{id:'001',title:'message001'},{id:'002',title:'message002'},{id:'003',title:'message003'}]}},}
</script>

Detail组件中接收参数:

<template><div><h3>Detail</h3><ul><li>消息编号:{{ $route.query.id }}</li><li>消息内容:{{$route.query.title}} </li></ul></div></template><script>export default {name: 'Detail',}
</script>

 

5.1.2 跳转路由并携带query参数, to的对象写法

Message组件中:

<template><div><ul><li v-for="m in messageList" :key="m.id"><!-- 跳转路由并携带query参数, to的对象写法 --><router-link :to="{path:'/home/message/detail',query:{id:m.id,title:m.title}}">{{m.title}}</router-link></li></ul><!-- 展示内容 --><router-view></router-view></div>
</template><script>export default {name: 'Message',data() {return {messageList: [{id:'001',title:'message001'},{id:'002',title:'message002'},{id:'003',title:'message003'}]}},}
</script>

Detail组件中:

<template><div><h3>Detail</h3><ul><li>消息编号:{{ $route.query.id }}</li><li>消息内容:{{$route.query.title}} </li></ul></div></template><script>export default {name: 'Detail',}
</script>

【总结】


5.2 给路由命名

在上述使用query传参中,使用 to 的对象形式传参时,如果路径很长时,就很麻烦


所有我们就可以给路由命名,通过name 指定要跳转的路径


在Message中


5.3 params方式传参

【1】配置路由,声明接收params参数


 

【2】Message组件中传递参数

5.3.1 跳转路由并携带params参数, to的字符串写法

<template><div><ul><li v-for="m in messageList" :key="m.id"><!-- 跳转路由并携带params参数, to的字符串写法 --><router-link :to="`/home/message/detail/${m.id}/${m.title}`">{{m.title}}</router-link></li></ul><!-- 展示内容 --><router-view></router-view></div>
</template><script>export default {name: 'Message',data() {return {messageList: [{id:'001',title:'message001'},{id:'002',title:'message002'},{id:'003',title:'message003'}]}},}
</script>

5.3.2 跳转路由并携带params参数, to的对象写法

使用对象形式传参时:指定跳转路径,必须使用name配置项, 不允许使用path配置项

<template><div><ul><li v-for="m in messageList" :key="m.id"><!-- 跳转路由并携带params参数, to的对象写法 --><router-link :to="{name: 'xiangqing',  // 如果使用params传参这边必须使用name, 不允许使用pathparams:{id:m.id,title:m.title}}">{{m.title}}</router-link></li></ul><!-- 展示内容 --><router-view></router-view></div>
</template><script>export default {name: 'Message',data() {return {messageList: [{id:'001',title:'message001'},{id:'002',title:'message002'},{id:'003',title:'message003'}]}},}
</script>

【3】Detail组件接收参数


5.4 props配置,实现传参

在router文件夹下的index.js文件中编写配置, 想传递参数给哪个组件,就给哪个组件加props配置

                   children: [ // 子路由的子路由(三级路由){name: 'xiangqing',path: 'detail',component: Detail,// props: ...}] 

使用props配置传参时,就会将接收的参数以props形式传递给目标组件


5.4.1 props配置方式1

props的第一种写法,值为对象,该对象中的所有key、value都会以props形式传递给Detail组件

这种方式用的不多,因为只能传递固定值的参数 

Detail组件中接收参数并使用


 

5.4.2 props配置方式2

值为布尔值,若布尔值为真,就会把该路由组件收到的所有params参数,以props形式传递给Detail组件

缺点是只能传递params参数

接收方式跟上面一样


 

5.4.3 props配置方式3

props的第三种写法,值为函数

推荐使用这种方式,因为query参数和params参数都可以传递


 

6 路由的replace属性

这个过程就相当于压栈的过程,push方式是将点击的所有路径都一次地压入栈中,而replace方式是将当前地路径替换掉它之前地路径


7 路由的编程式导航

作用:不借助<router-link>实现路由跳转,让路由跳转更加灵活

【代码1】 

<template><div><ul><li v-for="m in messageList" :key="m.id"><button @click="pushShow(m)">push查看</button><button @click="replaceShow(m)">replace查看</button></li></ul><!-- 展示内容 --><router-view></router-view></div>
</template><script>export default {name: 'Message',data() {return {messageList: [{id:'001',title:'message001'},{id:'002',title:'message002'},{id:'003',title:'message003'}]}},methods: {pushShow(m) {this.$router.push({name: 'xiangqing',params:{id: m.id,title: m.title}})},replaceShow(m) {this.$router.replace({name: 'xiangqing',params:{id: m.id,title: m.title}})}},}
</script><style></style>

 【代码2】

<template><div class="col-xs-offset-2 col-xs-8"><div class="page-header"><h2>Vue Router Demo</h2><button @click="back">后退</button><button @click="forward">前进</button></div></div>
</template><script>export default {name: 'Banner',methods: {back() {// this.$router.back()// go传入的正数表示前进的步数,负数表示后退的步数this.$router.go(-1)},forward() {// this.$router.forward()this.$router.go(1)}},}
</script>

【总结】


8 缓存路由组件

当一个组件中含有input表单时,如果用户在表单中输入了内容,这时又点击了另一个链接,此时当前的组件就会被销毁,在下一次访问该组件时,表单中的数据被清空了,如果用户输入了一些重要且长的信息,这用户体验是非常不好的。所以我们可以缓存路由组件解决这个问题

News组件 

 


【总结】


 

9 两个新的生命周期钩子


10 全局路由守卫(前置和后置路由守卫)

在router文件夹下的index.js文件中

注意这边的meta配置项


 


11 独享路由守卫

只有前置,没有后置


12 组件内守卫


13 路由的两种工作模式

有hash和history两种工作模式,默认是hash模式

如何修改为history模式?


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

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

相关文章

【项目】HTTP服务器

HTTP服务器 【项目】HTTP服务器项目介绍背景项目描述技术特点开发环境 网络协议栈HTTP协议特点URI & URL & URNURL格式HTTP请求与响应请求响应 CGI机制CGI的实现CGI的意义 日志封装TcpServer类线程池任务类CallBack回调方法类线程池类 封装HttpServer类主函数 封装HTTP…

Python asyncio的理解与入门

asyncio是Python标准库中用于编写异步代码的模块&#xff0c;它提供了一种基于协程的方式来处理并发任务。使用asyncio可以编写高效的异步程序&#xff0c;利用事件循环在单个线程中管理多个任务的执行。 下面是asyncio的基本概念和入门示例&#xff1a; 基本概念&#xff1a…

C 编译生成静态库、动态库的方式

背景 此前编程涉及到自定义编译生成静态库或动态库&#xff0c;为了方便以后查阅&#xff0c;在此记录一下&#xff0c;同时分享给大家。 将C文件编译成静态库或动态库可以使用不同的工具和编译选项&#xff0c;取决于你的需求和平台&#xff1b;以下是使用GCC编译器的简单示例…

Linux 内存top命令详解

通过top命令可以监控当前机器的内存实时使用情况&#xff0c;该命令的参数解释如下&#xff1a; 第一行 15:30:14 —— 当前系统时间 up 1167 days, 5:02 —— 系统已经运行的时长&#xff0c;格式为时:分 1 users ——当前有1个用户登录系统 load average: 0.00, 0.01, 0.05…

【ArcGIS微课1000例】0105:三维模型转体模型(导入sketchup转多面体为例)

文章目录 一、实验概述二、三维模型转多面体三、加载多面体数据四、注意事项一、实验概述 ArcGIS可以借助【导入3D文件】工具支持主流的三维模型导入。支持 3D Studio Max (.3ds)、VRML and GeoVRML 2.0 (.wrl)、SketchUp 6.0 (.skp)、OpenFlight 15.8 (.flt)、Collaborative …

【Web】没人比我更懂SSRF之入门必须要懂的知识汇总

目录 SSRF速览 伪协议 总览 file伪协议 dict伪协议 http协议 gopher伪协议 绕过 127限制绕过 302重定向绕过 DNS重绑定绕过 利用 gopher模拟请求打内网其他漏洞 Gopherus乱杀打组件 先看这篇文章&#xff1a;https://z3r4y.blog.csdn.net/article/details/135458…

算法——排序算法

目录 1、冒泡排序 2、插入排序 3、选择排序 4、归并排序 5、快速排序 6、堆排序 7、计数排序 8、桶排序 9、基数排序 常见的排序算法包括&#xff1a; 冒泡排序&#xff08;Bubble Sort&#xff09;插入排序&#xff08;Insertion Sort&#xff09;选择排序&#xff08;Se…

Oracle12cR2之Job定时作业调度器详解

Oracle12cR2之Job定时作业调度器详解 文章目录 Oracle12cR2之Job定时作业调度器详解1.Oracle Job1. 关于Job2. 使用方法 2. Job详细说明1. 查看Job的相关视图2.SYS.DBA_JOBS视图字段详细说明 3. 创建及查看Job1. 创建Job2. 查看运行中的Job 1.Oracle Job 1. 关于Job 在 Oracle…

关于open3d的 kdtree模块的 查询偶发性崩溃问题

主要问题还是open3d的 kdtree模块的 query相关的算法引起的。没来得及在github提issue也查不到相关issue&#xff0c;因为是偶发性崩溃。所以需要记录一下&#xff0c;防止后人踩坑。 初始化kdtree的方式如下。 sample_pcd_data o3d.data.PCDPointCloud() pcd o3d.io.read_p…

面向对象分析和设计

面向对象分析与设计 面向对象的基本概念 软件工程学家Coad和Yourdon给出了一个定义&#xff1a;面向对象&#xff08;Object-Oriented&#xff09;对象&#xff08;Object&#xff09;继承&#xff08;Inheritance&#xff09;通信&#xff08;Communication&#xff09;。如…

设计模式: 策略模式

文章目录 一、什么是策略模式二、策略模式结构三、使用场景案例分析1、使用场景2、案例分析&#xff08;1&#xff09;消除条件分支 一、什么是策略模式 策略模式是一种行为型设计模式&#xff0c;它允许定义一组算法&#xff0c;并将每个算法封装在独立的类中&#xff0c;使它…

如何设计出用于喜欢的界面

要设计出用户喜欢的界面&#xff0c;你可以考虑以下几个方面&#xff1a; 用户研究&#xff1a;首先要了解用户的需求和偏好。你可以通过用户调研、用户访谈和数据分析来获取这些信息。了解用户的行为模式、喜好和痛点&#xff0c;有助于设计出更吸引人的界面。 直观的布局&am…

LeetCode 2656.K个元素的最大和

给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。你需要执行以下操作 恰好 k 次&#xff0c;最大化你的得分&#xff1a; 从 nums 中选择一个元素 m 。 将选中的元素 m 从数组中删除。 将新元素 m 1 添加到数组中。 你的得分增加 m 。 请你返回执行以上操作恰好 k 次后…

easyx 枪声模拟器

作品介绍:枪声模拟器 简介: “枪声模拟器”是一个基于Windows平台的简单程序,它使用C++编写,主要目的是通过模拟枪声来增强用户的体验。程序使用了图形库来展示一个蓝色的背景屏幕,并提示用户等待片刻后按空格键模拟开枪。当用户按下空格键时,程序会播放预先设定的枪声音…

代码随想录算法训练营第十八天|235.二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作,450.删除二叉搜索树节点

235.二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树节点 235.二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近…

[Swift]定义一个全局的可管理的计时器

定义一个全局计时器&#xff0c;延迟执行操作。可以对计时器进行全局控制&#xff0c;能手动控制暂停/重启/停止&#xff0c;并在计时结束后释放掉计时器。 import Foundationclass TimerManager {static let shared TimerManager()private var timer: DispatchSourceTimer?…

基于Java+Springboot+vue体育用品销售商城平台设计和实现

基于JavaSpringbootvue体育用品销售商城平台设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写> 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领…

在 Vue 中将 DOM 导出为图片

你好&#xff0c;我是小白Coding日志&#xff0c;一个热爱技术的程序员。在这里&#xff0c;我分享自己在编程和技术世界中的学习心得和体会。希望我的文章能够给你带来一些灵感和帮助。欢迎来到我的博客&#xff0c;一起在技术的世界里探索前行吧&#xff01; 在日常的工作中&…

【 Maven 】花式玩法之多模块项目

目录 一、认识Maven多模块项目 二、maven如何定义项目的发布策略 2.1 版本管理 2.2 构建配置 2.3 部署和发布 2.4 依赖管理 2.5 发布流程 三、使用Jenkins持续集成Maven项目 四、总结 如果你有一个多模块项目&#xff0c;并且想将这些模块发布到不同的仓库或目标位置&…

Javai递归实现遍历父子级菜单

目录 准备工作 递归实现 未带有显示顺序的递归遍历 准备工作 create table dormitory_management.fuzi (menu_id bigint auto_increment comment 菜单IDprimary key,menu_name varchar(50) not null comment 菜单名称,parent_id bigint default 0 null c…