vue-路由详解

路由 vue-router

1.对路由的理解: vue的一个插件库,专门用来实现SPA应用
2.对SPA应用的理解:

     1.单页web应用2.整个应用只有一个完整的页面(index.html)3.点击页面中的导航链接不会刷新页面,只做页面的局部更新4.数据需要通过ajax请求获取

3.什么是路由?

1.一个路由就是一组映射关系**(key-value)**
2.  **key为路径,value可能是function或component**
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/f35fe5e9ee9b4f48940da24c7e73ef21.png#pic_center)

4.路由的分类

**1.后端路由**1.理解:value是function,用于处理客户端提交的请求2.工作过程:服务器接收到一个请求时,根据请求路径找到匹配的函数来处理请求,返回响应数据**2.前端路由:**1.理解:value是component,用于展示页面内容2.工作过程:当浏览器的路径改变时,对应的组件就会显示

路由的基本使用

1.安装vue-router

npm i vue-router@3

2.引入vueRouter,应用插件Vue.use(VueRouter)

// 引入vueRouter
import VueRouter from 'vue-router'
// 应用vue-router
Vue.use(VueRouter)

3.创建router–>index.js编写router配置项

 <!-- 1.引入VueRouter  -->import VueRouter from 'vue-router'<!-- 2.引入要使用的组件About -->import About from '../component/About'<!-- 3.创建并暴露router实例对象,去管理一组一组的路由规则 -->export default new VueRouter({routes:[          //路由规则(routes)是一个数组{path:'/about',   //路径component:About  //当跳转到上述路径时要在页面显示的组件}]})

4.实现切换(active-class 可配置高亮样式)
在组件中使用 <router-link to="路径">About组件<router-link/>调用路由规则,实现指定路由的切换,然后将路由规则中路径对应的组件通过<router-view></router-view>呈现到页面上

 <!-- 使用router-link指定路由的切换--><router-link active-class="active" to="/about">About组件</router-link>//router-view指定组件展示在什么位置<router-view></router-view>

5.几个注意点

  1.**路由组件**通常存放在**pages**文件夹下,**一般组件**存放在**components**文件夹下2.**通过切换,隐藏了的路由组件,默认是被销毁的,需要的时候再去挂载**3.**每个组件都有自己的$route属性,里面存储着自己的路由信息**4.**整个应用只有一个Router,可以通过组件的$router属性获取到**

多级路由(嵌套路由)

配置路由规则,使用children配置项,在父亲组件中配置children(本质是一个数组)

routes:[{path:'/about',component:About,children:[                //通过children配置子级路由{path:'news',         //此处一定不要写/,多级路由只需写名字即可component:News},{path:'message',component:Message},]},]

2.跳转(要带上父级路由,写完整路径)

<router-link  to="/About/news">News</router-link>

路由的query参数

1.传递参数(两种写法)
假如在message组件中有一组数据messageList
这时要将messageList里的id和title两个属性的值传递给message的子组件detail
使用query传参有两种写法

 <li v-for="message in messageList" :key =" message.id"><!-- **第一种写法:**跳转路由并携带query参数,to的字符串写法 --><!-- <router-link to="`/home/message/detail?id=${message.id}&title=${message.title}`">{{ message.title }}</router-link>&nbsp;&nbsp;</li> --><!--**第二种写法:** 跳转路由并携带query参数,to的对象写法 --><router-link :to="{path:'/home/message/detail',query:{id:message.id,title:message.title}}"></router-link>&nbsp;&nbsp;</li>

2.接收参数
接收参数就在子组件之中调用route接收

$route.query.id
$route.query.title

命名路由

1.作用:可以简化路由的跳转
2.如何使用?
给index.js中的路由加一个name:'名字'属性

routes:[{**name:'about',**          //通过name属性给每个组件配置一个名字path:'/about',component:About,children:[              //通过children配置子级路由{**name:'news',**       // 通过name属性给每个组件配置一个名字path:'news',         //此处一定不要写/,多级路由只需写名字即可component:News},{path:'message',component:Message,children:[name:'detail',path:'detail',component:'Detail'],},]},]

2.简化跳转,要将to写成对象写法
简化前:

  <router-link to="路径"> </router-link>

简化后,将to写成对象式

<router-link :to={name:'名字',//这里也可以写为原来的 path:'/home/message/detail',但是路径太长推荐使用namequery:{id:"message.id',title:'message.title'}}></router-link>

路由的params参数

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

   {path:'message',component:Message,children:[{name:'detail',**path:'detail/:id/:title',** //**使用占位符声明接收params参数**component:Detail}]},

2.传递参数
同样也有两种写法

 <li v-for="message in messageList" :key =" message.id"><!-- 第一种方法:**跳转路由并携带params参数,to的字符串写法** --><!-- <router-link to="`/home/message/${message.id}/${message.title}`">{{ message.title }}</router-link>&nbsp;&nbsp;</li> --><!-- 第二种方法:**跳转路由并携带params参数,to的对象写法** --><!-- **用to的对象写法,不能写配置项path,只能写name** --><router-link :to="{name:'detail',query:{id:message.id,title:message.title}}"></router-link>&nbsp;&nbsp;</li>

3.接收参数

与query接收参数同理

    $route.params.id$route.params.title

路由的props配置

作用:让路由组件更方便的收到参数
谁接收数据就在谁的路由规则中写配置项props

{path:'message',component:Message,children:[{name:'detail',path:'detail/:id/:title',component:Detail,//  detail接收数据// props值为函数,该函数返回的对象中每一组key-value都会通过props传给Detail组件,query与params都适用//props的参数是$route,通过$route可以拿到query或者params里的值props($route){  return {id:$route.params.id, 或者 id:$route.jquery.id, title:$route.params.title 或者   title:$route.jquery.title}}}]},

组件中用props配置项接收,在模板中使用数值

  <script>export default {name:'Detail',props:['id','title'],}</script>

<router-link>的replace属性

1.作用:控制路由跳转时操作浏览器记录的模式
2.浏览器的历史记录有两种写入方式:分别为push和replace,push是追加历史记录,replace是替换当前记录,路由跳转时默认为push
3.如何开启replace模式,<router-link  replace....>.....</router-link>

编程式路由导航

当标签不是a标签而是其他的标签,如button标签时,我们就不能使用<router-link>实现路由跳转了,这时就用到了编程式导航
1.作用:不借助`实现路由跳转,让路由跳转更灵活
2.具体编码

 <!-- $router的两个API,push与replace -->//push是追加历史记录,点击返回按钮可以返回上一次的记录this.router.push({//配置项,params也可以换成queryname:'',params:{ }})//replace是替换上一条记录,不能通过返回按钮返回上一次记录this.router.replace({name:'',params:{}})

其他的API

  this.$router.back()  //后退this.$router.forward()  //前进this.$router.go(传入要前进几个或者后进几个的数字)

缓存路由组件

1.作用:让展示的路由组件保持挂载,不被销毁
2.具体编码

  <keep-alive include="要缓存的组件名"><router-view></router-view></keep-alive>

两个新的生命周期钩子

1.作用:路由组件所独有的两个钩子,用于捕获路由组件的激活状态
2.具体名字:

    **1.actived 路由组件被激活时触发2.deactived 路由组件失活时触发**

路由守卫

1.作用:对路由进行权限控制
2.分类:全局守卫,独享守卫,组件内守卫
3.全局守卫
全局路由守卫写路由规则外面
给router–>index.js需要进行路由守卫的添加 meta:{isAuth:false}用来控制是否要对前来的路由进行检查
给router–>index.js所有配置路由规则的路由添加 meta:{title:'网页标题名'},使用全局后置路由配置网页标题
修改main.js

 // 全局前置路由守卫---初始化的时候被调用,每次路由切换之前被调用router.beforeEach((to, from, next) => {if(to.meta.isAuth){        //控制是否需要鉴权if(localStorage.getItem('school')==='北京大学' ){next();  //放行}elsealert('学校名不对')}else{next() //放行}});// 全局后置路由守卫---初始化的时候被调用,每次路由切换之后被调用// 设置网页标题 router.afterEach((to,from)=>{document.title = to.meta.title ||'好运'})<!-- 最后暴露 -->export default router

独享路由守卫

独享路由守卫写路由规则里面

   {name:'news',path:'news',component:News,meta:{isAuth:true,title:'新闻'},// 独享路由守卫beforeEnter:(to,from,next)=>{if(to.meta.isAuth){if(localStorage.getItem('school') === '清华大学'){next()}else{alert('学校名错误')}}else{next()}}},

组件内守卫

组件内守卫包含进入守卫和离开守卫
进入守卫的to与离开守卫的from相同

  • 1.进入守卫:通过路由规则,进入该组件时被调用*
beforeRouteEnter(to,from,next){if(to.meta.isAuth){if(localStorage.getItem('school') === '北京大学'){next()}else{alert('学校名错误')}}else{next()}
},
  • 离开守卫: 通过路由规则,离开该组件时被调用*
beforeRouteLeave(to,from,next){next()
}

路由器的两种工作模式

1.hash模式:
1.对于一个url来说,什么是hash值?涉及#后面的内容就是hash值
2.hash值不会包含在http请求中,即hash不会带给服务器
3.hash模式: 地址中永远带着#号,不美观 若以后将地址通过第三方收集app分享,若app校验严格,则地址会被标记为不合法 兼容性好

2.history模式

   1.地址干净,美观2.兼容性与hash相比略差3. 应用部署上线需要后端人员支持,解决刷新页面服务端404的问题

总结

1.Vue路由是Vue.js官方提供的一种前端路由管理方式,它可以实现单页应用(SPA)的页面跳转和组件切换,提供了一种优雅的方式来管理应用的URL。2.路由的基本概念:路由是指根据不同的URL路径,展示不同的内容或组件。在Vue中,可以通过Vue Router来实现路由功能。3.安装和配置Vue Router:首先需要通过npm安装Vue Router,然后在Vue项目中引入并使用Vue Router。配置包括定义路由规则、设置默认路由、配置路由参数等。4.路由的基本使用:在Vue Router中,可以使用<router-link>组件来生成链接,使用<router-view>组件来展示对应的组件内容。通过配置路由规则,可以实现不同路径对应不同的组件。5.动态路由:动态路由是指根据不同的参数生成不同的路由。在Vue Router中,可以通过在路由路径中使用冒号(:)来定义动态参数,并在组件中通过$route.params来获取参数值。6.嵌套路由:嵌套路由是指在一个组件中嵌套另一个组件,并且这两个组件都有自己的路由。在Vue Router中,可以通过配置子路由来实现嵌套路由。7.路由导航守卫:路由导航守卫可以在路由切换前后执行一些逻辑。Vue Router提供了多种导航守卫,包括全局前置守卫、全局后置守卫、路由独享守卫等。

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

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

相关文章

微信小程序uniapp+vue3+ts+pinia的环境搭建

一.创建uniapp项目 通过vue-cli创建 npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project二.安装依赖&#xff1a; 1.pnpm i 2.运行项目&#xff1a; 将package.json的 "dev:mp-weixin": "uni -p mp-weixin",改为 "serve": "u…

什么是量子计算?

什么是量子计算&#xff1f; 量子计算机仍处于起步阶段&#xff0c;正在影响已经在经典计算机上运行的新一代模拟&#xff0c;现在使用 NVIDIA cuQuantum SDK 进行加速。 在史蒂夫乔布斯 (Steve Jobs) 推出可以放入口袋的计算机之前 27 年&#xff0c;物理学家保罗贝尼奥夫 (P…

pnpm 使用

pnpm 使用 1、执行命令 sudo -s 切换管理员权限 2、执行命令 npm install --locationglobal pnpm 即可安装成功 3、执行命令 pnpm -v 检查pnpm是否安装成功 4、pnpm add – 安装指定的包

深入理解数据结构第一弹——二叉树(1)——堆

前言&#xff1a; 在前面我们已经学习了数据结构的基础操作&#xff1a;顺序表和链表及其相关内容&#xff0c;今天我们来学一点有些难度的知识——数据结构中的二叉树&#xff0c;今天我们先来学习二叉树中堆的知识&#xff0c;这部分内容还是非常有意思的&#xff0c;下面我们…

机器视觉学习(九)—— 边缘检测

目录 一、边缘检测 1.1 Canny边缘检测 1.1.1 cv2.Canny函数 1.1.2 Canny边缘检测示例 1.2 角点检测 1.2.1 cv2.goodFeaturesToTrack()函数 1.2.2 OpenCV角点检测示例代码 1.3 直线检测 1.3.1 cv2.HoughLinesP()函数 1.3.2 OpenCV直线检测示例代码 1.4 圆形检测 1.4…

3D密集面部对齐项目 | 基于Pytorch实现的快速+准确+稳定的3D面部对齐算法

项目应用场景 可以应用于人脸面部三维特征点的提取 人脸面部的三维重建&#xff0c;项目的特点是基于 Pytorch 实现、快速、准确、稳定 项目效果&#xff1a; 项目流程 > 具体参见项目内README.md (1) 构建 sh ./build.sh (2) 执行示例 # 1. running on still i…

android跳转到系统设置wifi界面

android跳转到系统设置wifi界面&#xff1a; Android跳转到系统Wifi界面的方式_android tv 跳转到wifi页面 多选-CSDN博客

持续交付与持续部署相关概念(CD)

目录 一、概述 二、持续交付基本概念 2.1 持续交付的含义 2.1.1 项目管理的视角 2.1.2 产品研发的视角 2.1.3 总结 2.2 持续交付涉及的运作环境 2.2.1 开发环境 2.2.2 测试环境 2.2.3 UAT环境 2.2.4 准生产环境 2.2.5 生产环境 2.3 总结 三、持续部署基本概念 3.…

redis对象list

Redis List是一组连接起来的字符串集合。 写操作&#xff1a; LPUSH 语法:LPUSH key value [value …] 功能:从头部增加元素,返回值为List中元素的总数。 RPUSH 语法:RPUSH key value [value …] 功能:从尾部增加元素,返回值为List中元素的总数。 LPOP 语法:LPOP key 功能…

用Python实现办公自动化(自动化处理Excel工作簿)

自动化处理Excel工作簿 &#xff08;一&#xff09;批量生产产品出货清单 以“出货统计表”为例&#xff0c; 需求&#xff1a;将出货记录按照出货日期分类整理成多张出货清单 “出货统计表数据案例” “产品出货清单模板” 1.提取出货统计表的数据 “Python程序代码” # 使用…

安全SCDN的威胁情报库对DDOS防护有什么好处

目前网络攻击事件频频发生&#xff0c;DDoS&#xff08;分布式拒绝服务&#xff09;攻击已成为各种企业&#xff08;小到区域性小公司大到各种跨国公司&#xff09;的主要威胁&#xff0c;DDoS 攻击可能会对企业造成重大损害和破坏&#xff0c;比如对目标公司的业务造成产生不利…

C#使用SQLite(含加密)保姆级教程

C#使用SQLite 文章目录 C#使用SQLite涉及框架及库复制runtimes创建加密SQLite文件生成连接字串执行SQL生成表SQLiteConnectionFactory.cs 代码结构最后 涉及框架及库 自己在NuGet管理器里面安装即可 Chloe.SQLite&#xff1a;ORM框架Microsoft.Data.Sqlite.Core&#xff1a;驱…

大数据学习-2024/3/29-PL/SQL中使用SQL语句对数据进行增删改查

1、创建用户 语法规范&#xff1a;create user 用户名 identifind by 密码; 命名规范&#xff1a;1、不能是纯数字 2、不能有特殊字符&#xff08;&#xff09;例如&#xff1a;yangyin create user yangyin identified by 123456;2、建表 create table 表名( 列名 数据类型…

React Native框架开发APP,安装免费的图标库(react-native-vector-icons)并使用详解

一、安装图标库 要使用免费的图标库&#xff0c;你可以使用 React Native Vector Icons 库。 首先&#xff0c;确保你已经安装了 react-native-vector-icons&#xff1a; npm install --save react-native-vector-iconsnpm install --save-dev types/react-native-vector-ic…

实现一个简单的排序算法(如冒泡排序或快速排序)

实现一个简单的排序算法&#xff08;如冒泡排序或快速排序&#xff09; 实现简单的排序算法&#xff1a;冒泡排序与快速排序 一、冒泡排序算法的实现与分析 冒泡排序是一种简单的排序算法&#xff0c;它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如…

并发编程之CountDownLatch和CyclicBarrier的详细解析(带小案例)

CountDownLatch 倒计时锁存器 用来解决线程执行次序的问题 CountDownLatch主要有两个方法&#xff0c;当一个或多个线程调用await方法时&#xff0c;这些线程会阻塞。 其它线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞)&#xff0c; 当计数器的值变为…

Android 使用SQLite保存数据

Android 使用SQLite保存数据 简介定义架构和协定使用 SQL 创建数据库将信息添加到数据库insert()函数介绍 从数据库中读取信息query()函数介绍 从数据库中删除信息delete()函数介绍 更新数据库update()函数介绍 保留数据库连接调试数据库 简介 对于重复数据或结构化数据&#…

云服务器8核32G配置租用优惠价格94元/月、1362元一年

8核32G云服务器京东云轻量云主机价格94元1个月、282元3个月、673元6个月、1362元一年&#xff0c;配置8C32G-100G SSD系统盘-10M带宽-2000G月流量 华北-北京&#xff0c;京东云优惠活动 yunfuwuqiba.com/go/jd 活动链接打开如下图&#xff1a; 8核32G云服务器京东云轻量云主机价…

数据挖掘篇【 alias方法 和 隐式转换 】

目录 介绍 隐式转换 alias方法 介绍 在 Apache Spark 中&#xff0c;.alias 是一个方法&#xff0c;用于给 DataFrame 的列或表达式指定一个新的别名。当你需要对列进行重命名或者在 SQL 表达式中使用更易读的名称时&#xff0c;这个方法非常有用。 .alias 方法通常与 Dat…

CSS(三)---【盒子模型、边框、外边距合并】

零.前言 本篇主要介绍CSS中最重要的一种概念模型&#xff1a;“盒子模型”。 关于CSS的更多内容&#xff0c;可以查看作者之前的文章&#xff1a; CSS(一)---【CSS简介、导入方式、八种选择器、优先级】-CSDN博客 CSS(二)---【常见属性、复合属性使用】-CSDN博客 一.盒子模…