【vue入门手册】十、路由守卫

简介: 【vue入门手册】十、路由守卫

路由守卫是用来保护这个页面切换的过程,确保只有满足一些特定条件的情况下,才能够跳转到其他页面。路由守卫就像一道门神,保护着我们的网站。

譬如说,当你想进入一个需要登录才能查看的页面时,路由守卫可以检测这个情况,如果没有登录,就会拦截跳转操作,并且提示你需要先登录才能查看。

路由守卫本质上是一系列的钩子函数(Hook functions),在路由跳转过程中,它们会被自动触发。我们可以根据需要编写这些函数,来实现用户权限、登录验证、数据加载等功能,以便更好地规划和管理我们的网页应用。


Vue 的路由守卫有三个钩子函数,分别为全局钩子、路由独享钩子、组件内钩子。

  1. 全局钩子:
  • beforeEach(to, from, next):在路由切换开始时调用,可以用来进行一些全局的前置守卫逻辑。
  • afterEach(to, from):在路由切换完成后调用,可以实现页面切换后的一些后置处理逻辑。
  • beforeResolve(to, from, next):在路由切换开始时调用,可以用来确保异步路由组件被解析之后执行其他的守卫和路由钩子。


  1. 路由独享钩子:
  • beforeEnter(to, from, next):定义在路由上,只对该路由生效,可以用来进行该路由的前置守卫逻辑。


  1. 组件内钩子:
  • beforeRouteEnter(to, from, next):在组件即将被插入到父组件之前调用,但是此时无法访问 this,需要通过 next(vm => {}) 来访问组件实例。
  • beforeRouteUpdate(to, from, next):在组件复用时调用,如果组件没有复用,则不会被调用。此时可以访问 this 来进行一些响应式的数据处理。
  • beforeRouteLeave(to, from, next):在组件即将被导航离开时调用,可以用来进行用户离开该页面时的确认提示。


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

  • to: Route: 即将要进入的目标路由对象
  • from: Route: 当前导航正要离开的路由
  • next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。


示例 - 检测用户是否登录

注意!需要将vue-router 降到3.0.0版本,否则路由守卫监听报错

npm uninstall vue-router

npm install vue-router@3.0.0

router.beforeEach 中定义的钩子函数有三个参数:

// 在router/index.js 中配置全局的路由守卫
// 路由切换开始前调用
router.beforeEach((to, from, next) => {
  /* must call `next` */
  console.log('to',to.meta.isAuth)
  // 路由元信息中配置isAuth字段,标识未需要检测登录
  // 检测用户数据本地是否缓存
  if(to.meta.isAuth && !localStorage.getItem('user')){
    // 未登录
    next({name:"login"})
  }else{
    next()
  }
});
  • to:即将要进入的目标路由对象。
  • from:当前导航正要离开的路由。
  • next:推进函数,调用该函数来 resolve 这个钩子函数。调用 next() 表示放行路由,调用 next(false) 表示取消当前的导航,并且浏览器的 URL 不会发生变化,调用 next('/') 或者其他路径表示重定向。

其中,tofrom 都是 Route 类型的实例,包含了各种与路由相关的信息,比如路径、参数、匹配到的组件等。next 函数的调用是一个必要的步骤,通过它来告知 Vue-Router 是否执行后续的路由导航操作,允许你进行一些前置守卫逻辑或者登录验证等操作。

相关文章
|
4天前
|
缓存 监控 JavaScript
探讨优化Vue应用性能和加载速度的策略
【5月更文挑战第17天】本文探讨了优化Vue应用性能和加载速度的策略:1) 精简代码和组件拆分以减少冗余;2) 使用计算属性和侦听器、懒加载、预加载和预获取优化路由;3) 数据懒加载和防抖节流处理高频事件;4) 图片压缩和选择合适格式,使用CDN加速资源加载;5) 利用浏览器缓存和组件缓存提高效率;6) 使用Vue Devtools和性能分析工具监控及调试。通过这些方法,可提升用户在复杂应用中的体验。
14 0
|
4天前
|
JavaScript 前端开发
vue(1),小白看完都会了
vue(1),小白看完都会了
|
3天前
|
JavaScript 开发工具 git
Vue 入门系列:.env 环境变量
Vue 入门系列:.env 环境变量
10 1
|
4天前
|
JavaScript 前端开发 定位技术
Vue使用地图以及实现轨迹回放 附完整代码
Vue使用地图以及实现轨迹回放 附完整代码
Vue使用地图以及实现轨迹回放 附完整代码
|
JavaScript 测试技术 容器
Vue2+VueRouter2+webpack 构建项目
1). 安装Node环境和npm包管理工具 检测版本 node -v npm -v 图1.png 2). 安装vue-cli(vue脚手架) npm install -g vue-cli --registry=https://registry.
992 0
|
4天前
|
JavaScript 数据库
ant design vue日期组件怎么清空 取消默认当天日期
ant design vue日期组件怎么清空 取消默认当天日期
|
4天前
|
JavaScript C++
vue高亮显示组件--转载
vue高亮显示组件--转载
9 0
|
4天前
|
JavaScript 前端开发 数据安全/隐私保护
揭秘Vue中v-model的内部工作机制
揭秘Vue中v-model的内部工作机制
|
4天前
|
JavaScript
Vue中避免滥用this去读取data中数据
Vue中避免滥用this去读取data中数据
|
4天前
|
JavaScript
vue中使用pinia及持久化
vue中使用pinia及持久化
7 0