当前位置:网站首页 > Vue.js开发 > 正文

路由守卫vue使用场景(vue 路由守卫和路由拦截器)



单页面应用就是用 Vue.js + Vue Router 创建的,我们只需要将组件 Component 映射到路由 Routes,然后告诉 Vue Router 在哪里渲染它们即可。Vue Router 能够轻松地管理 SPA 项目中组件的切换。

简单来说就是:Hash 地址组件之间的对应关系。

注,vue-router 目前只有 与 的版本,其中:

  • vue-router 3.x 只能结合 进行使用。
  • vue-router 4.x 只能结合 进行使用。

本文讲解的 Vue Router 基于 3.x 版本。

安装

 
  

使用

 
  

 
  

 
  

演示效果:

routes 映射表

 
  

mode 路由模式

 
  

区别:

base 基路径

应用的基路径。例如,如果整个单页应用服务在 下,然后 就应该设为 。默认值为 。

linkActiveClass 激活类名

全局配置 默认的激活的 class。被激活的路由链接,默认会应用一个叫做 的类名,开发者可以使用此类名选择器,为激活的路由链接设置高亮的样式:

 
  

🎈自定义路由高亮的 class 类:

在创建路由的实例对象时,开发者可以基于 属性,自定义路由链接被激活时所应用的类名:

 
  

编程式导航的 函数可以根据命名路由的 属性进行路由跳转。

注意:命名路由的 值不能重复,必须保证其唯一性

 
  

可见启动项目后的默认地址为 ,页面一片空白,若要页面一开始就呈现 Home Page 页面,则需要使用路由重定向。

👛重定向:

 
  

👝起别名:

区别于重定向的 URL 变化。

举个例子: 的别名是 ,意味着,当用户访问 时,URL 会保持为 ,但是路由匹配则为 ,就像用户访问 一样

 
  

路由懒加载的好处:当访问到某个页面才去加载相关资源,提高页面的访问速度。

 
  

router-view

: 路由占位符,就是我们要跳转的页面/组件会这个占位符。

注: 也可以配合 一起使用!

 
  

router-link

: 路由链接,用于跳转到指定路径,相当于 a 标签。

 
  

通过路由实现组件间的嵌套展示,叫做嵌套路由。在父路由规则中,通过 属性嵌套声明子路由规则。

 
  

声明子路由规则后,还需要在父组件中添加子路由占位符 才能使得路由跳转 。

 
  

感受下嵌套跳转:

路由有 2 种传参方式,分别是

  • params 传参:形如
  • query 传参:形如

params 方式

想要获取 RESTful 风格的路由参数,得把 Hash 地址中可变的部分定义为参数项,从而提高路由规则的复用性。在 vue-router 中使用 定义路由的参数项。比如:

 
  

🚀这类路由称为动态路由

 
  

通过动态路由匹配的方式渲染出的组件,可以使用 对象访问动态匹配的参数值。

 
  

效果:


为了简化路由参数的获取形式,vue-router 允许在路由规则中开启 接收动态路由参数。

 
   

在 Movie.vue 组件中接收参数

 
   

演示:

query 方式

通过 拼接参数:

 
   

获取参数:

 
   

query 传参:

🚀官网传送门

  • Router 实例属性
  • Router 实例方法
  • Route 对象属性
  • 与 组件注入

前者 是路由组件的导航对象,后者 是路由组件的状态对象

接下来通过一个实例了解下 对象的部分属性:

在下文编程式导航中使用并演示。

 
    

演示结果:

🔎 Router 实例方法全解!

为了搞懂什么是编程式导航,先来简单了解下声明式导航, 导航链接就是声明式导航;而所谓编程式导航就是使用 vue-router 提供的相关 API 进行页面跳转。

声明式 编程式

⭐编程式导航相关 API 如下:

$router.push(path)

在 Vue 实例内部,可以通过 访问路由实例。因此你可以调用 ,其他 API 同理。

的参数可以是一个字符串路径,或者一个描述地址的对象。例如:

注:通过 属性跳转只能是命名路由

 
    

💝注意: 与 不能同时使用,否则 会被忽略!

$router.replace(path)

用指定路由替换当前路由(用法同 ),但不会记载到历史记录中。

$router.back()

跳转到历史记录的上一个页面;等价于 .

$router.forward()

跳转到历史记录的下一个页面;等价于 .

$router.go(n)

可以在浏览历史中前进和后退,n 小于 0 后退,n 大于 0 前进,n 等于 0 刷新当前页面。

全局导航守卫

Vue Router 有 3 个全局守卫:

  • :全局前置守卫,进入路由之前
  • :全局解析守卫,在 调用之后调用
  • :全局后置钩子,进入路由之后
全局前置守卫
 
    

当一个导航触发时,全局前置守卫按照创建顺序调用。守卫是异步解析执行,此时导航在所有守卫 resolve 完之前一直处于 等待中

🚀每个守卫方法接收三个参数:

  • : 即将要进入的目标 路由对象。
  • : 当前导航正要离开的路由。
  • : 一定要调用该方法来 resolve 这个钩子。执行效果依赖 方法的调用参数。
    • : 进行管道中的下一个钩子
    • : 中断当前的导航
    • 或者 : 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。你可以向 传递任意位置对象,且允许设置诸如 、 之类的选项以及任何用在 的 属性 或 中的选项。
    • : 如果传入 的参数是一个 实例,则导航会被终止且该错误会被传递给 注册过的回调。

🌈确保 函数在任何给定的导航守卫中都被严格调用一次。它可以出现多于一次,但是只能在所有的逻辑路径都不重叠的情况下,否则钩子永远都不会被解析或报错。举个栗子:

 
    
全局解析守卫

你可以用 注册一个全局守卫。这和 类似,区别是在导航被确认之前,同时在和被解析之后,解析守卫就被调用。

 
    
全局后置钩子

你也可以注册全局后置钩子,然而和守卫不同的是,这些钩子不会接受 函数也不会改变导航本身:

 
    

路由独享守卫

如果你不想全局配置守卫的话,你可以为某些路由单独配置守卫(路由独享守卫):

路由独享守卫仅有一种:

 
    

组件内的守卫

可以在路由组件内直接定义以下 3 种路由导航守卫:

  • : 不能获取组件实例 ,因为当守卫执行前,组件实例还没被创建。
  • : 在当前路由改变,但是该组件被复用时调用(即:在动态路由间跳转时)的情况下执行,可以访问组件实例 。
  • : 导航离开该组件的对应路由时调用,可以访问组件实例 。
 
    

❤️/ END / 如果本文对你有帮助,点个「赞」支持下吧。

到此这篇路由守卫vue使用场景(vue 路由守卫和路由拦截器)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • vmware2016密钥(vmware16.1密钥)2025-07-16 14:00:10
  • jsjsjsjsj是什么意思(sjsjdjsjs是什么意思)2025-07-16 14:00:10
  • vb6.0名词解释大全(b6d2f1名词解释)2025-07-16 14:00:10
  • ubuntu国内源地址(ubuntu21.04国内源)2025-07-16 14:00:10
  • vue的钩子(vue中的钩子是什么)2025-07-16 14:00:10
  • ubuntu镜像源版本不匹配(ubuntu16.04镜像源)2025-07-16 14:00:10
  • redhat6.0安装教程(redhat6.5安装教程)2025-07-16 14:00:10
  • js深拷贝实现方式(js深拷贝json parse)2025-07-16 14:00:10
  • ubuntu20.04更新源(ubuntu更新源有什么用)2025-07-16 14:00:10
  • vue路由守卫用法(vue的路由守卫有什么应用场景)2025-07-16 14:00:10
  • 全屏图片