Vue学习之 路由(Router)

文章目录

  • Vue学习之 路由(Router)
  • 一、路由是什么?
  • 二、Vue Router的安装
    • 1.直接下载/CDN
    • 2.NPM安装
  • 三、路由的基础使用
    • 1.定义路由组件
    • 2.定义路由
    • 3. 创建Router实例
    • 4.注册路由
    • 5.使用路由
  • 四、动态路由
    • 1.动态匹配
    • 2.响应路由参数的变化
  • 五.路由守卫
    • 1.全局守卫
    • 2.路由独享守卫
    • 3.组件内部守卫
  • 六、嵌套路由
  • 总结:

一、路由是什么?

在计算机网络原理中,路由是指路由器从一个接口上收到数据包,根据数据包的目的地址进行定向并转发到另一个接口的过程。可以想象为快递转运站,根据包裹的地址信息将快递送到指定地点。

在web中的路由也是类似的,route根据url的不同来跳转到相应的url页面

Vue提供了路由的组件Vue Router


二、Vue Router的安装

1.直接下载/CDN

资源地址:https://unpkg.com/vue-router/dist/vue-router.js

2.NPM安装

npm install vue-router

三、路由的基础使用

1.定义路由组件

路由要有映射的组件

let myA = {template:`<div>A组件</div>`}let myB = {template:`<div>B组件</div>`}

2.定义路由

    let routes = [{path: '/',component: myA,//路由重定向redirect: '/a',//redirect: { name: 'aRoute' },},{path: '/a',component: myA,name: 'aRoute',alias: '/aa',},{path: '/b',component: myB}];

一个最基础的路由对象有这两个属性:

path:路由地址
component:映射的组件

除此之外,Router还有一些其他属性

name:名称,可方便以后的跳转
alias:别名,可以通过别名来访问路由
redirect:路由重定向,比如你想让组件一开始就在某个路由上,就可以用重定向。
当用户访问 /时,URL 将会被替换成 /a,然后匹配路由为 /a.

3. 创建Router实例

//2.创建路由器对象let router = new VueRouter({routes: routes})

4.注册路由

 new Vue({el: '#app',router: router,data: {msg: 'hello'},methods: {},})

这里的router就是用来注册路由器的。

5.使用路由

<div id='app'><!-- 使用路由 --><div><router-link to="/a">去A路由</router-link><router-link to="/b">去B路由</router-link><a href="#/a">a标签去A路由</a></div><div><!-- 组件显示的位置 --><router-view></router-view></div></div>

这里 <router-link></router-link>的显示效果和a标签是一样。你同样可以是啊标签来进行路由的跳转


四、动态路由

我们经常需要把某种模式匹配到的所有路由,全都映射到同个组件。例如,我们有一个 User 组件,对于所有 ID 各不相同的用户,都要使用这个组件来显示不同的内容。那么,我们可以使用动态路由

1.动态匹配

  {path: '/user/id/:id/username/:username',component: myA,},

动态路由在路由地址上使用冒号来接受数值。

<router-link to="/user/id/1/username/zhangsan">去A路由</router-link>

当匹配到一个路由时,参数值会被设置到 this.$route.params,可以在每个组件内使用。

2.响应路由参数的变化

如果我们想要页面根据路由路径参数的不同去做相应的变化,可以有几种方式
最简单就是watch监听

<div id='app'><!-- 使用路由 --><div><router-link to="/user/id/1/username/zhangsan">去A路由</router-link><router-link to="/b">去B路由</router-link></div><div><router-view></router-view></div></div><script>let myA = {data() {return {id: null,username: ''}},template:`<div>A组件{{id}}--{{username}}</div>`,  //监听watch: {$route(to, from) {// to是新路由,from是旧路由   // console.log(to, from);this.id = to.params.id;this.username = to.params.username;}}}let myB = {template:`<div>B组件</div>`}let routes = [{path: '/user/id/:id/username/:username',component: myA},{path: '/b',component: myB}];let router = new VueRouter({routes: routes})new Vue({el: '#app',router: router,data: {msg: 'hello'},methods: {},})</script>

监听是Vue中的方法,Vue router还提供了路由守卫(也叫导航守卫),路由守卫是专门用来监听路由的


五.路由守卫

1.全局守卫

全局守卫定义在全局作用域中,所有的路由变化都会触发该守卫
全局守卫有两种:前置和后置,分别在路由改变前后执行

     //前置守卫router.beforeEach((to, from, next) => {console.log(to, from, next, '-----beforeEach-----');next();})//后置守卫router.afterEach((to, from) => {console.log(to, from, '------afterEach------');})

两者都有 to 和 from,to是新路由 ,from是旧路由。
需要注意的是,前置守卫有next函数,这个函数是用来执行到下一步的,如果在前置守卫中没有next,则无法执行下一步。

2.路由独享守卫

路由独享守卫写在路由对象内部,只有在该路由内有路由变化才会触发

let routes = [{path: '/b',component: myB,// 设置路由独享守卫beforeEnter(to, from, next) {console.log(to, from, next, '------beforeEnter------');next();}}];

3.组件内部守卫

组件内守卫写在组件内部,只有在该组件的路由变化才会触发该守卫
组件内守卫有三种,分别在进入路由、更新路由、离开路由时触发

let myA = {template:`<div>A组件</div>`,// 2.3 组件内守卫beforeRouteEnter(to, from, next) {console.log('------beforeEnter------');next();},beforeRouteUpdate(to, from, next) {console.log('------RouteUpdate------');next();},beforeRouteLeave(to, from, next) {console.log('------RouteLeave------');next();}}

六、嵌套路由

实际生活中的应用界面,通常由多层嵌套的组件组合而成。在不同层级都有<router-view></router-view>,这就可能产生问题,当点击最下层的路由时,路由组件可能会显示在最上层的<router-view></router-view>上,这就需要使用给路由设置层级的父子关系。
给路由设置子路由要使用children

let routes = [{path: '/student',component: Student,},{path: '/course',component: Course,children: [{path: 'grade',component: CourseGrade,},{path: 'plan',component: CoursePlan,},]},]

有了层级关系之后,Vue在渲染的时候就会根据这个层级关系,找到合适<router-view></router-view>再进行渲染。

总结:

今天总结的内容较多,Router是Vue中非常重要的一个东西,在做项目的时候会经常用到,这里整理的都是一些比较常用的东西,还有一些别的内容我会后续在整理出来

Vue学习之路由(Router)相关推荐

  1. Vue学习记录-路由

    什么是路由 **后端路由:**对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源: **前端路由:**对于单页面应用程序来说,主要通过URL中的hash(#号)来实现 ...

  2. vue工程化与路由router

    一.介绍 vue.js 是 目前 最火的前端框架,vue.js 兼具 angular.js 和 react.js 的优点,并剔除它们的缺点.并且提供了很多的周边配套工具 如vue-router .vu ...

  3. vue学习笔记——路由

    1 路由配置 在vue.config中配置,则在代码中可以使用 @来表示src目录下 import aa from '@/aa/index.js' 2 单页面可以懒加载 3 创建动态路由 路由中定义: ...

  4. vue 学习笔记—路由篇

    一.关于三种路由 动态路由 就是path:good/:ops    这种 用 $route.params接收 <router-link>是用来跳转  <router-view> ...

  5. vue学习 32路由精讲之二级路由和三级路由

    分级时,默认打开指定下级的路由,使用redirect属性,其值为子级路由的路径path. 子级使用属性children: 值为数组,数组中每个元素都是一个路由对象 二级路由 在main.js中配置路由 ...

  6. WEB前端 vue学习 vue-router讲解router.push

    router.push(location) 除了使用 <router-link> 创建 a 标签来定义导航链接,我们还可以借助 router 的实例方法,通过编写代码来实现. router ...

  7. Vue 学习 第六天学习笔记

    Vue 学习 第六天学习笔记 1.webpack  使用复习 第一步:先建立文件夹. 第二步,用webpack将其初始化,建立管理.npm 的包管理工具管理起来, npm init -y  .注意{查 ...

  8. Vue学习--Vue项目根目录介绍(1)

    文章目录 前言 一.build文件夹--webpack 配置目录 二.mock文件夹--生成随机数据,拦截ajax请求 三.node_modules--npm 加载的项目依赖模块 四.public文件 ...

  9. Vue 学习(十、 Vue Router - 路由插件 和 Vue 的插件原理)

    文章目录 一.Vue Router - 路由插件 1. 安装 Vue Router 2. Vue Router 路由的基本使用 3. 设置 router-link 4. 编程式路由 5. 路由嵌套 6 ...

最新文章

  1. [转]DICOM医学图像处理:Deconstructed PACS之Orthanc
  2. idea未进行快捷键配置时的快捷键
  3. Codeforces Round #633 B. Edge Weight Assignment 结论题 + dp
  4. poj3714 最近点对
  5. NetworkManager
  6. python-kafka多线程快速读取consumer消费者数据,同时使用批读取与无限流读取改进
  7. android向web提交数据,中文乱码
  8. Tomcat乱码解决方法
  9. 兴业银行研发中心笔试题_2019兴业银行笔试真题汇编(一)_考生回忆版
  10. 券商股票程序化交易接口(转)
  11. error: crosses initialization of
  12. 1024 程序员节狂欢盛会,等了一年终于来了!
  13. 联网获取360数据,识别骚扰电话,java实现
  14. Spring Cloud Gateway 自定义网络响应状态码(401,500,503等等)
  15. 【机器学习】【隐马尔可夫模型-3】后向算法:算法详解+示例讲解+Python实现
  16. 乌镇互联网大会官方首次使用AI同传,搜狗为雷军提供机器翻译
  17. 矢量点积与矢量叉乘的微分
  18. 卡尔曼滤波(Kalman filter)算法
  19. 【软件测试】测试与开发一对欢喜冤家......
  20. 23计算机考研22408上岸武汉理工大学经验贴

热门文章

  1. 移动端调试神器vConsole
  2. 使用Portainer管理Docker镜像
  3. google authenticator 工作原理
  4. Android 将一张CMYK模式的图片转换成RGB模式的图片
  5. python蓝桥杯真题刷题打卡 | day7
  6. 中国风国潮设计资源合集,这样的新国风实在太美了
  7. linux服务器下数学软件下载,动态数学软件-GeoGebra For Linux下载V5.0.155.0官方版-西西软件下载...
  8. c语言编写机床宏程序,从事数控车床2年,想学宏程序
  9. 【2】MediaPipe面部识别
  10. 苹果恢复出厂设置好吗_还原手机和恢复出厂设置一样吗?原来有这么大的区别...