文章目录

  • 一、路由概述
  • 二、基本使用
    • 1. 安装vue-router
    • 2. 应用插件
    • 3.编写router配置项
    • 4. 实现切换
    • 5. 指定组件的呈现位置
    • 多级路由(嵌套路由)
    • 1.配置路由规则,使用children配置项
    • 2.跳转(写完整路径)
  • 三、路由的query参数
    • 1.传递参数
    • 2.接收参数
  • 四、命名路由
    • 1.命名
    • 2.简化跳转
  • 五、路由的params参数
    • 1.配置路由,声明接收`params`参数
    • 2.传递参数
    • 3.接收参数
  • 六、路由的props配置
  • 七、 `` 的`replace`模式
  • 八、编程式路由导航
  • 九、缓存路由组件
  • 十、两个新的生命周期钩子
  • 十一、路由守卫
    • 1.全局路由守卫
    • 2.独享路由守卫
    • 3.组件内路由守卫
  • 十二、路由器的两种工作模式

一、路由概述

一个路由就是一组key:value的对应关系(key为路径,value可能是functioncomponent

前端路由:(valuecomponent)用于展示页面内容,当浏览器的路径改变时,对应的组件就会显示。

多个路由需要经过路由器的管理

router包含多个route规则(/class => 班级组件 、/subject => 学科组件)

vue-router 专门用来实现SPA应用

注: SPA页面(单页面应用)(只有一个完整的页面)

(点击页面中导航链接不会刷新页面,只会做页面的局部更新)

二、基本使用

router-link最终转换为a标签

1. 安装vue-router

npm i vue-router

2. 应用插件

import VueRouter from 'vue-router'
Vue.use(VueRouter)

3.编写router配置项

创建文件 `src/router/index.js`
//该文件专门用于创建整个应用的路由器
//引入VueRouter
import VueRouter from "vue-router"//引入路由组件
import About from '../pages/About'
import Home from '../pages/Home'//创建router实例对象,管理一组一组的路由规则
const router = new VueRouter({routes:[{path:'/about',components:About},{path:'/home',component:Home}]
})
//暴露router
export default router

4. 实现切换

<router-link active-class="active" :to="/about">About</router-link>

注:router-link最终转换为a标签,:to类似于hrefactive-class可配置高亮样式

5. 指定组件的呈现位置

<router-view></router-view>

注:

  • 路由组件专门放入新建pages文件夹中,一般组件通常存放在components文件夹中。

  • 通过切换,隐藏了的路由组件,默认是被销毁掉的,需要的时候再去挂载。

  • 每个组件都有自己的$route属性,里面存储着自己的路由信息

  • 整个应用只有一个router,可以通过组件的$router属性获取到

多级路由(嵌套路由)

1.配置路由规则,使用children配置项

export default new VueRouter({routes:[{path:'/about',component:About},{path:'/home',component:Home,children:[            //配置子级路由{path:'news',        //不用再加/component:News,},{path:'message',        //不用再加/component:Message}]}]
})

2.跳转(写完整路径)

<router-link :to="/home/news">About</router-link>

三、路由的query参数

1.传递参数

Message.vue内)

<!-- 跳转路由并携带query参数 to的字符串写法 -->
<router-link :to="`/home/message/detail?id=${m.id}&title=${m.title}`">{{m.title}}</router-link>
<!-- 跳转路由并携带query参数 to的对象写法 -->
<router-link :to="{path:'/home/message/detail',query:{id:m.id,title:m.title}}"> {{m.title}}</router-link>

2.接收参数

Detail.vue内)

{{$route.query.id}}
{{$route.query.title}}

四、命名路由

(简化路由的跳转)

1.命名

export default new VueRouter({routes:[{name:'xiaoxi',path:'/message',component:Message,children:[{name:'xiangqing'path:'detail',        //不用再加/component:Detail,},]},
})

2.简化跳转

<!-- 简化前写完整路径 -->
<router-link to="/message/detail">跳转</router-link>
<!-- 简化后通过名字跳转 -->
<router-link :to="{name:'xiangqing'}">跳转</router-link>
<!-- 简化写法配合传递参数 -->
<router-link :to="{name:'xiangqing',query:{id:m.id,title:m.title}}">
跳转</router-link>

五、路由的params参数

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

{path:'/home',component:Home,children:[            //配置子级路由{path:'news',        //不用再加/component:News,},{path:'message',        //不用再加/component:Message,children:[{name:'xiangqing',path:'detail/:id/:title',         //使用占位符声明接收params参数component:Detail}]}]
}

2.传递参数

Message.vue内)

<!-- 跳转路由并携带params参数 to的字符串写法 -->
<router-link :to="`/home/message/detail/${m.id}/${m.title}`">{{m.title}}</router-link><!-- 跳转路由并携带query参数 to的对象写法 -->
<!-- 必须写name 不能用path写 -->
<router-link :to="{name:'xiangqing',params:{id:m.id,title:m.title}}">{{m.title}}
</router-link>

注:携带params参数时,若使用to的对象写法,则不能使用path配置项,必须使用name配置

3.接收参数

Detail.vue内)

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

六、路由的props配置

让路由组件更方便的收到参数

{name:'xiangqing',path:'detail',component:Detail,// props的第一种写法,值为对象,该对象中的所有key-value都会以props的形式传给detail组件// props:{a:1,b:'hello'}    写死了// props的第二种写法,值为布尔值,若布尔值为真,就会把该路由组件收到的所有params参数,以props的形式传给Detail组件// props:true// props的第三种写法,值为函数,该函数返回对象中的每一组key-value都会通过props传给Detail组件props($route){return {id:$route.query.id,title:$route.query.title}}//连续解构赋值/* props({query:{id,title}}){return {id,title}} */
}

Detail.vue内接收

props:['id','title']

七、 <router-link>replace模式

(控制路由跳转时操作浏览器历史记录的模式)

浏览器的历史记录有两种写入方式:分别为pushreplacepush是追加历史记录,replace是替换当前记录,默认为push

<router-link replace ...>News</router-link>

八、编程式路由导航

(不借助<router-link>实现路由跳转)

Message.vue内两个按钮的点击事件的具体内容

this.$router.push({name:'xiangqing',params:{id:xxx,title:xxx}
})
this.$router.replace({name:'xiangqing',params:{id:xxx,title:xxx}
})

this.$router.back()      //后退
this.$router.forward()  //前进
this.$router.go(-2)     //正数连续前进n步,负数连续后退n步

九、缓存路由组件

让不展示的路由组件保持挂载,不被销毁

<!-- News指组件名 -->
<keep-alive include="News"><router-view></router-view>
</keep-alive><!-- 缓存多个路由组件 -->
<keep-alive :include="['News','Message']"><router-view></router-view>
</keep-alive>

十、两个新的生命周期钩子

路由组件独有的,用于捕获路由组件的激活状态

activated:路由组件被激活时触发

deactivated:路由组件失活时触发

十一、路由守卫

保护路由的安全(权限)

1.全局路由守卫

index.js

//全局前置路由守卫————初始化被调用,每次路由切换之前被调用
router.beforeEach((to,from,next)=>{console.log('前置路由守卫',to,from);if(to.meta.isAuth){     //判断是否需要鉴权// if(to.path === '/home/news' || to.path === '/home/message'){if(localStorage.getItem('school')==='xiaoxue'){next()}else{alert('学校名不对,无权限查看')}}else{next()          //放行}
})//全局后置路由守卫————初始化被调用,每次路由切换之后被调用
router.afterEach((to,from)=>{console.log('后置路由守卫',to,from);document.title = to.meta.title || '系统'
})
export default router

注:meta:路由元信息,在路由组件内添加,设置isAuth值为true的组件需要鉴权

next():放行

2.独享路由守卫

某一个路由所独享的,在其路由配置内编写。(只有前置没有后置)

beforeEnter: (to, from, next) => {console.log('前置路由守卫',to,from);if(to.meta.isAuth){     //判断当前路由是否需要进行权限控制// if(to.path === '/home/news' || to.path === '/home/message'){if(localStorage.getItem('school')==='xiaoxue'){next()}else{alert('学校名不对,无权限查看')}}else{next()}
}

3.组件内路由守卫

在组件内编写。

//通过路由规则,进入该组件时被调用
beforeRouteEnter(to, from, next) {console.log("beforeRouteEnter", to, from);if (to.meta.isAuth) {//判断是否需要鉴权// if(to.path === '/home/news' || to.path === '/home/message'){if (localStorage.getItem("school") === "xiaoxue") {next();} else {alert("学校名不对,无权限查看");}} else {next();}
},
//通过路由规则,离开该组件时被调用
beforeRouteLeave(to, from, next) {console.log('About--beforeRouteLeave',to,from);next()
}

十二、路由器的两种工作模式

1.hash值:#及其后面的内容

#/about 都成为hash值

2.hash值不会成为路径的一部分,不会包含在HTTP请求中,不会带给服务器。

3.hash模式:兼容性好

4.history模式:兼容性差,应用部署上线后需要后端支持,解决刷新页面后404问题

const router = new VueRouter({mode:'hash',        //hash为默认值...
})

Vue_路由_query参数_params参数_命名路由_props配置_编程式路由导航_缓存路由组件_新的生命周期钩子_全局、独享、组件内路由守卫_路由的两种工作模式相关推荐

  1. 8086的两种工作模式_Buck变换器工作原理

    一.Buck变换器另外三种叫法 1.降压变换器:输出电压小于输入电压. 2.串联开关稳压电源:单刀双掷开关(晶体管)串联于输入与输出之间. 3.三端开关型降压稳压电源: 1)输入与输出的一根线是公用的 ...

  2. linux apache两种工作模式详解

    apache两种工作模式详解 刚接触这两个配置时很迷糊,全部开启或全部注释没有几多变化.今天搜索到这么一篇讲得还不错的文章,看了几篇,还是不能完全记住,做一个收藏. 空闲子进程:是指没有正在处理请求的 ...

  3. 8086的两种工作模式_Lora自组网网关的两种工作模式

    LoRa技术具有远距离.低功耗.多节点.低成本和抗干扰的特点.另一方面,LoRa低速率支持较小的数据传输. 服务器.终端(内置LoRa模块).网关(或基站).云四部分组成了LoRa网络.如下所示 Lo ...

  4. FTP服务器的两种工作模式

    FTP协议: FTP(File transfer Protocol)是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20.21号端口, 其中端口20(数据端口)用于进行数据传输,端 ...

  5. Oracle 的两种工作模式Dedicated Server 和 Shared Server

    Oracle可以分成两种工作模式, 分别是 Dedicated Server 和 Shared Server                   1  Dedicated Server         ...

  6. 路由器的两种工作模式

    路由器的两种工作模式: 1.对于一个url来说,什么是hash值?--#及其后面的内容就是hash值.2.hash值不会包含在HTTP请求中,即:hash值不会带给服务器. 3. hash模式: 1) ...

  7. 路由器的两种工作模式~~~

    1.路由器的两种工作模式:hash模式.history模式. 一.hash模式 1)对于url来说,#及其后面的内容就是hash值: 2)hash值不会包含在http请求中,即:hash值不会带给服务 ...

  8. 8086的两种工作模式_8086有哪两种工作模式?其主要区别是什么?

    满意答案 picolsa 2014.04.26 采纳率:45%    等级:9 已帮助:615人 8086管脚信号的定义.8086是一个40管脚的器件,为了便于组成不同规模的系统, Intel公司为8 ...

  9. seaweedfs上传文件为什么要先申请文件号?(/dir/assign)(两种工作模式:Volume模式与Filer模式)(seaweed上传文件)

    文章目录 SeaweedFS两种工作模式 Volume模式 Filer模式 总结 SeaweedFS两种工作模式 SeaweedFS是一个分布式文件系统,它有两种模式:Volume模式和Filer模式 ...

  10. ZigBee网络信标(Beacon)和非信标(Non-beacon)两种工作模式

    ZigBee网络可以分为信标(Beacon)和非信标(Non-beacon)两种工作模式.为最大限度的节约能源消耗,信标模式可以使所有网络设备同步工作和同步休眠:而在非信标模式下,协调器和路由器必须长 ...

最新文章

  1. [NOIP1999] 普及组
  2. 【noi 2.6_9284】盒子与小球之二(DP)
  3. php中请写出定义变量的两种方法,php定义变量几种
  4. myeclipse开发代码颜色搭配保护视力
  5. C++工作笔记-在项目中解决编码问题小技巧
  6. Black White(尺取)
  7. 通过这本拼图学习Bash
  8. Java RMI原理与使用
  9. C# mysql导入文件报错:The used command is not allowed with this MySQL version
  10. iOS 开发者常用的75 个工具
  11. html5鼠标悬停图片变淡,鼠标移动悬停在图片上图片变色或半透明变化效果实现...
  12. 机房搬迁实施规划方案
  13. c++11原子量atomic
  14. window操作系统安装教程(PE辅助)
  15. box-sizing与盒模型
  16. 为什么python打不开_Python打不开.py文件
  17. 深入了解不同类型的服务器防火墙
  18. 能源互联网理论与及其实际应用初探
  19. 【2004-3】【平分核桃】
  20. 12、加权平均队列(WFQ-Weight Fair Queue)算法

热门文章

  1. 使用Python实现一个简单的聊天室
  2. matlab中矩阵运算
  3. java操作数据库步骤_java数据库操作基本流程
  4. 飞秋与虚拟机的有关IP设置
  5. 离线强化学习(Offline RL)系列3: (算法篇) TD3+BC 算法详解与实现(经验篇)
  6. 利用python修改小米运动数据,整个朋友圈都感觉太夸张了
  7. sql注入数据库原理详解
  8. [USACO09NOV]Job Hunt
  9. 关于C++中的随机数生成器
  10. 微信小程序-001-抽签功能-002-新建抽签