Advertisement

vue-router+vuex addRoutes 实现路由和菜单的动态加载

  • 5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:PDF


简介:
基于Vue Router和VUE的addRoutes方法负责实现路由动态加载以及菜单项的动态加载功能本篇文章着重讲述了采用vue-router+vuex库的addRoutes方法实现动态路由和菜单加载的技术方案。通过这种技术手段,在用户登录后能够根据其角色权限动态生成相应的菜单结构以及相应的路由配置规则,并且确保了权限管理的颗粒度,从而实现了对菜单中各项功能权限的精准控制。 我们需要明确vue-router在新Vue启动时的行为模式,以确保其实例能够正常加载。这一过程是必须完成的步骤。这表明,在用户登录前我们无法预知权限信息,因此无法预先确定路由规则的具体设置。为了解决这个问题,我们可以采用VUEX技术来实现对路径和菜单同步的管理。最初的想法是在开始阶段导入所有路由规则配置文件,在用户登录时获取权限相关的路由信息,将这两个路径进行比对分析。通过这种方式可以实现隐藏菜单的目的。然而,这种做法存在一定的局限性,比如当向后端新增一些菜单项时,这些路由是按照模块化的文件结构加载的不同的资源链接,尽管如此,如果能够通过修改相应的内容字段来调整权限设置,则问题可以得到解决。但若用户通过手动修改浏览器路径来实现,则仍然存在一定的风险。因此,我们有必要引入一种新方案以解决这一难题。自vue-router 2.2.0版本起,官方提供了新的addRoutes方法,专为实现服务端路由渲染而设计。至此,这一问题的解决变得相对容易起来。我们能够通过调用addRoutes函数来动态地配置路由策略,从而实现对路由资源的灵活扩展。 下面是实现代码的示例:```javascript let permission = JSON.parse(window.sessionStorage.getItem(permission)) if (permission) { store.commit(ADD_MENU, permission) router.addRoutes(store.state.menu.items) } ```在上述代码中,在获得用户权限的基础上,通过调用该方法实现了动态路由规则的加载。此外,我们需要在所有路由的全局钩子中设置全局拦截机制,以确保用户仅能访问其自身权限范围内的路由。```javascript router.beforeEach((route, redirect, next) => { if (route.path === login) { window.sessionStorage.removeItem(user) window.sessionStorage.removeItem(permission) store.commit(ADD_MENU, []) } let user = JSON.parse(window.sessionStorage.getItem(user)) if (!user && route.path !== login) { next({ path: login }) } else { if (route.name) { next() } else { next({ path: nofound }) } } }) ```在提供的代码示例中,我们调用$beforeEach$钩子用于阻止请求处理路由。当用户未登录或缺乏相应的权限时,将该请求转而引导至登录页面。采用vue-router与vuex结合的addRoutes功能能够支持路由和菜单的动态加载,并负责实现对菜单下不同层级权限的精细管理。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • 使用VueElement三级效果
    优质
    本项目演示了如何利用Vue框架结合Element UI组件库来创建具备动态加载功能的三级菜单系统,提供灵活且高效的导航解决方案。 可以通过使用中间件的方式实现我们想要的功能。以下是 `publish-center.vue` 文件的代码示例: ```vue ``` 请注意,代码中的 `` 需要在实际项目中替换为具体的路由组件。
  • 使用addRoutesVue
    优质
    本篇文章通过具体示例详细讲解了如何在Vue项目中利用addRoutes方法来实现动态路由配置,帮助开发者灵活控制应用中的页面导航。 之前在关于基于Vue实现后台系统权限控制的文章里提到过路由权限的实现思路。由于不喜欢每次路由跳转前通过before钩子进行判断,因此选择在初始化Vue实例前对路由进行了筛选处理,并用实际路由来初始化Vue实例。这种方法的一个代价是登录页面需要从Vue实例中独立出来,但在实现上并没有遇到太大问题。不过这样做导致了用户必须通过URL跳转才能从登录页进入首页,感觉不够“优雅”。实际上,在用户成功登录后直接动态修改当前Vue实例的路由就可以解决这个问题。 随着vue-router 2.2版本发布的新方法router.addRoutes(routes),可以实现在运行时添加新的路由。因此,利用这个新特性来实现基于权限控制的动态路由管理似乎是一种理想的方案:初始状态只包含登录页面和404错误页,在用户成功认证后可以根据其角色或权限即时加载相应的路由配置。
  • 使用addRoutesVue示例
    优质
    本示例详细介绍了如何在Vue项目中利用addRoutes方法实现动态添加和管理路由的功能,帮助开发者灵活控制应用中的导航规则。 本段落主要介绍了使用Vue的addRoutes方法实现动态路由的一个示例。我认为这个例子非常有用,并且推荐给大家参考。希望这篇文章能帮助大家更好地理解和应用这一功能。
  • Vuerouter配置
    优质
    本文介绍了如何在Vue项目中自动化管理router路由配置的方法和技巧,提高开发效率。 本段落介绍了一种基于vite+vue3的自动化导入及路由配置方法,可以省去手动编写繁琐的路由配置步骤。 该技术已经在大型项目中得到应用,并且在性能上与传统手动方式几乎无异,甚至能够实现动态创建和销毁路由的功能,从而提高导航效率。其主要优势包括: 1. 显著减少重复性工作; 2. 适用于任何规模项目的开发需求; 3. 大幅降低项目构建成本; 4. 支持多人协作环境下的开发流程,不会影响其他开发者对新配置文件的修改操作; 5. 减少代码冲突的风险。
  • Vue解决addRoutes重复添问题
    优质
    本篇文章主要探讨如何在使用Vue框架开发应用时避免addRoutes方法导致的路由重复问题,并提供了解决方案。 我就废话不多说了,大家还是直接看代码吧。 ```javascript import Vue from vue import Router from vue-router Vue.use(Router) const createRouter = () => new Router({ mode: history, routes: [] }) const router = createRouter() export function resetRouter() { const newRouter = createRouter() router.matcher = newRouter.matcher } ```
  • Vue Router 与常见问题解决方案
    优质
    本文详细介绍了如何使用 Vue Router 实现动态路由,并提供了针对常见问题的解决方案。适合希望提升应用灵活性和性能的开发者阅读。 个人理解:动态路由与常见的静态路由不同,在不同的「因素」影响下可以调整站点的路由列表。许多常用的动态路由主要用于实现多用户权限系统中根据用户的角色展示不同的导航菜单。 如何利用Vue Router 实现动态路由? 在Vue项目中,实现动态路由的方式主要有两种: 1. 前端预先定义好所有可能的路由,在登录时依据用户的角色和权限来决定显示哪些具体的路由; 2. 路由信息存储于数据库中,前端通过接口获取当前用户的对应路由列表,并据此进行渲染。 第一种方式在很多Vue UI Admin项目上都有实现,可以参考这些项目的源码以理解具体思路。这里主要介绍第二种方法,因为它现在较为常见。我的方案是利用Vue Router来动态加载和展示用户特定的路由信息。
  • Vue + Vuex + Vue-Router + Axios + ElementUI
    优质
    本项目采用Vue作为前端框架,结合Vuex进行状态管理,使用Vue-Router实现页面路由,通过Axios处理异步请求,并运用ElementUI提供丰富的组件库,构建高效、美观的Web应用。 基于Vue2.x、Vuex、vue-router、Axios和ElementUI的一套后台开发系统模板。
  • Vue技巧
    优质
    本文将介绍如何在Vue项目中灵活运用动态路由配置,涵盖组件按需加载、参数传递等关键技术点,助您打造更为高效的应用程序。 很多时候我们在项目的路由配置是在前端完成的,但为了实现全面的权限控制,有时需要后台提供路由表数据供前端渲染使用。下面主要讲一下具体的思路: 1. 与后端开发人员沟通好所需的数据格式,并将我们前端使用的路由表信息告知他们,这样他们就能理解我们的需求。 2. 当从后台获取到数据时,需要注意的是“component”部分需要由我们自己处理,因为这部分是根据前端的组件路径定义的。我们需要让后台按照提供的前端组件路径提供相应的数据,然后通过循环加载的方式实现动态导入: ```javascript return () => import(`@/view/modules/${view}`); ``` 这样我们就能够获取到路由中最重要的“component”部分。 3. 接下来需要处理从后台获得的数据,并根据需求重写这些信息。
  • 关于Vue-Router嵌套讲解
    优质
    本教程详细解析了如何在Vue.js项目中使用Vue-Router进行嵌套路由配置与应用开发,帮助开发者构建更加复杂的多级页面结构。 嵌套路由(配置好父路由的component后,在父路由下面添加children属性来配置这个父路由的子路由) 需要注意的是:在父组件中的是必不可少的,它是用来显示子组件内容的位置。 使用嵌套路由时的现象是:点击了导航链接之后,虽然会跳转到新的页面或部分视图(即子路由),但父级路由的内容仍然保持不变;而子路由的内容则会发生变化,并且浏览器地址栏中的路径也会相应地更新。 例如: ```json { path: nest, component: () => import(@/components/nest.vue), // 添加关键字children来配置嵌套路由的子路径 children:[ { ... } ] } ``` 在上述例子中,`children`数组用于定义父路由下的多个可能的子路由。