vue-router中的beforeEach

vue-router中的beforeEach最近在做vue项目的开发,用到的技术栈主要是vue相关的,在开发这个项目的时候,设计到了权限,因为是后台管理系统,不同的身份和角色访问系统的时候,系统所展现出来的可访问内容都是不一样的,有兴趣的同学可以参考下RBAC(以角色为基础的权限管理设计)这篇文章写得很详细,很直观,我写这篇文章主要是想要分享一下前端的技术栈vue-router是如何处理的,以及踩过的坑。vue-router可以参考官方文档vue-router,官方文档中介绍的很详细,解决权限问题,就用到了addRoutes这个API,去动态添

大家好,又见面了,我是你们的朋友全栈君。

最近在做vue项目的开发,用到的技术栈主要是vue相关的,在开发这个项目的时候,设计到了权限,因为是后台管理系统,不同的身份和角色访问系统的时候,系统所展现出来的可访问内容都是不一样的,有兴趣的同学可以参考下RBAC(以角色为基础的权限管理设计)这篇文章写得很详细,很直观,我写这篇文章主要是想要分享一下前端的技术栈vue-router是如何处理的,以及踩过的坑。

  • vue-router

可以参考官方文档vue-router,官方文档中介绍的很详细,解决权限问题,就用到了addRoutes这个API,去动态添加路由,我项目目前使用的vue-router的版本号是3.0.1,我把我初始化创建路由实例的代码可以展示给你们看一下的:

vue-router中的beforeEach

  • 动态路由处理方式

因为每次在进行路由跳转的时候,都会触发对应的钩子函数,可以参考官网的文档注解:

vue-router中的beforeEach

本人在项目里面是运用了beforeEach这个钩子函数来监控路由的变化的,具体可以参看代码:

vue-router中的beforeEach

 

  • beforeEach实现的思路如下:

每次通过vue-router进行页面跳转,都会触发beforeEach这个钩子函数,这个回调函数共有三个参数,to,from,next这三个参数,to表示我要跳转的目标路由对应的参数,from表示来自那个路由,就是操作路由跳转之前的,即将离开的路由对应的参数,next是一个回调函数,一定要调用next方法来resolve这个钩子函数;

vue-router中的beforeEach

这里在使用beforeEach的时候,应该要注意,如果这个beforeEach函数没有合理利用的情况下,就会陷入到无限循环之中。看到的现象就是整个页面不停的刷新,其实从代码的角度来看是一致在进行路由跳转,也就是一致在不停的执行beforeEach这个函数。

当在beforeEach这个函数中调用next({path:’/home’})的时候,会中断当前导航;比如当前导航是去/a,那么遇next({path:’/home’})之后,就会把to.path改成home,然后重新触发beforeEach这个钩子函数,注意是重新触发,而不是在当前这个钩子的函数的基础上去执行;之前因为对这一点理解的不透彻,以为只要是调用next({path:’/home’})就可以直接跳转到home了,但是没有像预期的那样,反而陷入到了无限循环之中;当重新触发以后,因为没有加上合理的判断条件,所以会一直循环。
解决这个无限循环的办法就是加上一个判断,如果to.path===‘/home’,就执行next();这样子就不会无限循环了。

可以看下代码示例:

vue-router中的beforeEach

 

以上就是本人在本次写项目的时候踩过的坑,跟大家分享一下经验,喜欢的话,就点个赞吧!

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148626.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月28日 下午10:00
下一篇 2022年6月28日 下午10:00


相关推荐

  • VUE:父子组件间传参、子组件传值给父组件、父组件传值给子组件

    VUE:父子组件间传参、子组件传值给父组件、父组件传值给子组件Vue 是一个轻量级的渐进式框架 对于它的一些特性和优点在此就不做赘述 本篇文章主要来探讨一下 Vue 子父组件通信的问题首先我们先搭好开发环境 我们首先得装好 git 和 npm 这两个工具环境搭建步骤 打开 git 运行 npminstallgl cli 这是安装 vue 的命令行 vueinitwebpa demo 这是 vue 基于 webpack 的模板项目

    2026年3月18日
    2
  • python线程wait_Python线程指南

    python线程wait_Python线程指南本文介绍了 Python 对于线程的支持 包括 学会 多线程编程需要掌握的基础以及 Python 两个线程标准库的完整介绍及使用示例 注意 本文基于 Python2 4 完成 如果看到不明白的词汇请记得百度谷歌或维基 1 线程基础 1 1 线程状态线程有 5 种状态 状态转换的过程如下图所示 1 2 线程同步 锁 多线程的优势在于可以同时运行多个任务 至少感觉起来是这样 但是当线程需要共享数据时 可能存在

    2026年3月18日
    1
  • linux内核编译过程的最终总结版

    linux内核编译过程的最终总结版一、实验目的学习重新编译Linux内核,理解、掌握Linux内核和发行版本的区别。二、实验内容在Linux操作系统环境下重新编译内核。实验主要内容:A.查找并且下载一份内核源代码,本实验使用最新的Linux内核2.6.36。B.配置内核。C.编译内核和模块。D.配置启动文件。本次实验环境是Linux2.6.35内核的环境下,下载并重新编译内核源代码(2…

    2022年7月23日
    17
  • mjRefresh使用指南

    mjRefresh使用指南MJRefreshAne to refresh 用法简单的下拉刷新框架 一行代码搞定 ContentsGett 支持哪些控件的刷新 Installation 如何使用 MJRefresh Who susing 已经超过上百个 App 正在使用 MJRefresh Classes MJRefres

    2026年3月18日
    4
  • 看完了aspnetmvc nerdinner项目

    看完了aspnetmvc nerdinner项目这几天一直在看aspnetmvc-nerdinner这本书中的Nerdinner代码编写的全过程。其实觉得用最原始的办法:动手敲代码带给我们的好处比单纯的看然后Copy代码再运行要好的多,最起码加深了我们的记忆。前段时间看了ASP.NET网站上关于ASP.NETMVC编程的培训文章,觉得MVC挺强大的,然后就试着自己做了一个小项目,可是在做的过程中,很多东西确实见多人家怎么做,也知道大概…

    2026年4月18日
    5
  • 基于web的酒店管理系统_新锐酒店管理系统

    基于web的酒店管理系统_新锐酒店管理系统小型酒店管理系统一、前言小型酒店管理系统采用Vue前端框架、SpringBoot框架实现项目前后端分离,并通过Mysql存储数据。本系统实现针对不同用户的登录验证;客户信息、前台管理员以及超级管理员等信息存取;客户信息登记、预约、入住、消费等功能;前台管理员对客户操作的管理;超级管理员对客户以及前台管理员操作进行控制等的功能,系统功能基本实现,测试良好。二、系统可行性分析(一)系统开发工具及平台操作系统:Windows10编程语言:Vue、SpringBoot开发工具:WebStorm、I

    2026年3月8日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号