当前位置: 首页 > news >正文

Vue-router 导航守卫有哪些

Vue-router 的导航守卫主要有以下几种:

  1. 全局前置守卫:使用 router.beforeEach 注册,在路由跳转前触发。主要用于登录验证、权限检查等场景。

  2. 全局解析守卫:使用 router.beforeResolve 注册,在导航被确认之前调用,通常用于确保路由的异步操作完全解析[3]。

  3. 全局后置钩子:使用 router.afterEach 注册,在路由跳转完成后触发。常用于记录日志或执行一些全局操作[5]。

  4. 路由独享守卫:在路由配置上直接定义 beforeEnter 守卫,这些守卫只适用于特定的路由[1]。

  5. 组件内的守卫:包括 beforeRouteEnterbeforeRouteUpdatebeforeRouteLeave。这些守卫在组件级别执行,允许对组件实例进行更细粒度的控制[2]。

以下是具体举例说明:

  1. 全局前置守卫

    • 示例:用户未登录时重定向到登录页面。
    • 代码
      router.beforeEach((to, from, next) => {if (to.name !== 'Login' && !isAuthenticated) {next({ name: 'Login' });} else {next();}
      });
      
  2. 全局解析守卫

    • 示例:确保所有异步数据加载完成后再进行导航。
    • 代码
      router.beforeResolve((to, from, next) => {if (to.meta.requiresAsyncData) {// 确保异步数据加载完成myAsyncDataLoadingFunction().then(() => {next();});} else {next();}
      });
      
  3. 全局后置钩子

    • 示例:记录用户访问的每个页面。
    • 代码
      router.afterEach((to, from) => {console.log(`Navigated to: ${to.fullPath}`);
      });
      
  4. 路由独享守卫

    • 示例:特定路由需要额外的权限检查。
    • 代码
      const router = new VueRouter({routes: [{path: '/admin',component: Admin,beforeEnter: (to, from, next) => {if (hasAdminPermission) {next();} else {next('/');}}}]
      });
      
  5. 组件内的守卫

    • beforeRouteEnter:组件渲染前调用,不能访问 this
    • 示例:通过回调函数获取组件实例。
    • 代码
      beforeRouteEnter (to, from, next) {next(vm => {console.log('Component instance:', vm);});
      }
      
    • beforeRouteUpdate:当前路由改变但组件被复用时调用。
    • 示例:响应式更新组件数据。
    • 代码
      beforeRouteUpdate (to, from, next) {this.data = to.params.id; // 假设组件有一个 data 属性来存储 idnext();
      }
      
    • beforeRouteLeave:离开组件时调用。
    • 示例:提示用户保存未保存的更改。
    • 代码
      beforeRouteLeave (to, from, next) {if (this.unsavedChanges) {let answer = window.confirm('Do you really want to leave? You have unsaved changes!');if (answer) {next();} else {next(false);}} else {next();}
      }
      

http://www.mrgr.cn/news/46312.html

相关文章:

  • Windows11下 安装 Docker部分疑难杂症(Unexpecter WSL error)
  • Zabbix 7.2入门实战
  • 闪送股价破发:估值大幅缩水、客单价不断下滑,红海竞争如何突围?
  • 用来deploy jar包的bat脚本
  • VS Code安装以及配置
  • 两文读懂DDD领域驱动设计,举例说明,通俗易懂【值得收藏】
  • 基于Python的COM库控制CANoe同时打开多个.cfg工程方法案例
  • 爬虫常用正则表达式用法
  • Apache SeaTunnel 9月份社区发展记录
  • Linux:多线程中的生产消费模型
  • 决策树随机森林-笔记
  • 基于Android11简单分析audio_policy_configuration.xml
  • Linux网络编程 -- 网络套接字预备与udp
  • Lombok的@Builder注解
  • ES操作指南
  • Run the FPGA VI 选项的作用
  • AI改变一切,包括你的毕业论文!如何应对?
  • 十年网络安全工程师谈学习网络安全的正确顺序
  • 希亦超声波清洗机值得购买吗?清洁技术之王多维度测评大揭秘!
  • 基于邮箱的域名欺骗攻击:利用解析器绕过访问控制