vue addRoutes路由动态加载操作


Posted in Javascript onAugust 04, 2020

需求:增加权限控制,实现不同角色显示不同的路由导航

思路:每次登陆后请求接口返回当前角色路由

核心方法:vue-router2.2.0的addRoutes方法 + vuex

以下是我实现的获取菜单路由的方法,我将该方法的调用放在首页组件的生命钩子中,即便用户刷新浏览器清空了路由还是会重新调用接口获取,不至于会丢失。同时考虑到会有切换用户的可能,所以不将获取到的路由信息保存到cookie或者localstorage当中

获取菜单之前先判断routerState,避免多次请求, 我这里使用element-ui的导航菜单功能v-for循环this.myRouter参数即可显示动态路由导航

/**
* 获取菜单
*/
getMenu () {
 if (this.$store.getters.routerState === false) {
 // 清理已经存在的动态路由
 this.clearDynamicRoute()
 // 更改请求路由状态为true
 this.$store.commit('SET_ROUTERSTATE', true)
 getMyMenu().then((res) => {
  if (res.code === '0') {
  // 格式化路由,将数据转为addRoutes可接受的route格式数组
  let myMenu = this.formatMenu(res.data.menu)
  if (myMenu.length <= 0) { // 没有动态路由
   return
  }
  for (let index = 0; index < myMenu.length; index++) {
   // 将请求的路由先存放到options对象中
   this.$router.options.routes.push(myMenu[index])
  }
  // 将完整需要显示的路由添加进去
  this.$router.addRoutes(this.$router.options.routes)
  // 这里将路由显示在页面上
  this.MyRouter = this.$router.options.routes
  }
  // 在这里就可以打印出新路由
  console.log(this.$router)
 })
 }
}

补充知识:vue+element 进入不同路由页面(二级页面),让相应的左侧菜单

路由配置

{
 path: '/finance',
 name: 'Finance',
 meta: {
 title: '财务'
 },
 component: () =>
 import('@/components/Finance'),
 redirect: '/finance/code/code',
 children: [{
 path: '/finance/code',
 name: 'financeindex',
 meta: {
 title: '税收配置'
 },
 redirect: '/finance/code/code',
 component: () =>
 import('@/components/finance/financeindex'),
 children: [{
 path: '/finance/code/code',
 name: 'FinanceCode',
 hidden: false,
 active:'/finance/code', //这里是在左侧菜单显示并且需要选中的
 meta: {
  title: '税收编码(金税)'
 },
 component: () =>
  import('@/components/finance/code/Code'),
 },
 {
 path: '/finance/code/codeimportrecord',  // 这个路由进入的界面是 税收编码(金税)的二级页面, 当进入这个页面的时候,需要菜单中的税收编码(金税)显示选中
 name: 'FinanceCodeImportRecord',
 hidden: true,
 meta: {
 title: '税收编码导入记录'
 },
 component: () =>
 import('@/components/finance/code/CodeImportRecord'),
 },
 {
 path: '/finance/classcode/classcode',
 name: 'FinanceClassCode',
 hidden: false,
 active:'/finance/classcode', //为了省事,只给需要在左侧显示的路由添加active属性
 meta: {
  title: '分类税收编码确认'
 },
 component: () =>
  import('@/components/finance/classCode/ClassCode'),
 },
 ]
 }, ]

element

<template>
 <div class="leftnav">
 <!--<div class="" v-for="nav in navs">
   <div class="LiHeader">
    {{nav.name}}
   </div>
   <li v-for="item in nav.san">
    {{item.name}}
   </li>
  </div>-->
 <el-menu
  style="text-align: left;"
  :default-active=this.show // 这是的值是指与 el-menu-item中:index的值对应的那一天显示选中(正常情况就是一个页面一个路由,进入那个路由,对应的导航菜单需要选中)
  class="el-menu-vertical-demo"
  @open="handleOpen"
  @close="handleClose"
  background-color="#282b33"
  text-color="#bcbcbc"
  active-text-color="#ffffff">
  <div class="" v-for="(nav,index) in navs" :key="index" style="width: 200px;">
  <div class="" style="color: #ffffff;height: 40px;line-height: 40px;padding-left: 20px;font-size: 16px;">
   {{nav.meta.title}}
  </div>
  <el-menu-item @click="clickroute(item.path)" v-for="(item,index) in nav.children" v-if="!item.hidden" :key="index" :index="item.active"(这里原来是item.path) style="height: 40px;line-height: 40px;">{{item.meta.title}}</el-menu-item>
  </div>

 </el-menu>
 </div>
</template>
<script>

js

data() {
  return {
  navs:[],
  show:null //初始化上面:default-active绑定的值
  }
 },
 created() { //// 页面载入的时候,拿到url,用/拆开,然后拼起来前两个路径,并且赋值, 这个时候show对应的就是路由表中的 avtive,
  let route=this.$route.path.split('/')
  let vueRouter=this.$router.options.routes.filter(router=>{return router.path=='/'})[0].children
  let filterVuerouter=vueRouter.filter(router=>{return '/'+route[1] == router.path })
  this.navs=filterVuerouter[0].children
  console.log(this.navs)

  let router ='/'+route[1]+'/'+route[2]
 console.log(router)
  this.show=router
//  console.log(this.show)
 },
 mounted() {

 },

以上这篇vue addRoutes路由动态加载操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用js判断用户浏览器是否是XP SP2的IE6
Mar 08 Javascript
JavaScript Event学习第九章 鼠标事件
Feb 08 Javascript
jquery 页面滚动到底部自动加载插件集合
Jan 31 Javascript
JavaScript及jquey实现多个数组的合并操作
Sep 06 Javascript
Javascript优化技巧之短路表达式详细介绍
Mar 27 Javascript
php常见的页面跳转方法汇总
Apr 15 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
Dec 08 Javascript
jquery实现定时自动轮播特效
Dec 10 Javascript
js制作支付倒计时页面
Oct 21 Javascript
jquery tmpl模板(实例讲解)
Sep 02 jQuery
Angular 4根据组件名称动态创建出组件的方法教程
Nov 01 Javascript
Vue项目接入Paypal实现示例详解
Jun 04 Javascript
vue+element使用动态加载路由方式实现三级菜单页面显示的操作
Aug 04 #Javascript
Vue登录拦截 登录后继续跳转指定页面的操作
Aug 04 #Javascript
vue 解决uglifyjs-webpack-plugin打包出现报错的问题
Aug 04 #Javascript
浅谈在vue-cli3项目中解决动态引入图片img404的问题
Aug 04 #Javascript
解决vuecli3中img src 的引入问题
Aug 04 #Javascript
简介JavaScript错误处理机制
Aug 04 #Javascript
vue 出现data-v-xxx的原因及解决
Aug 04 #Javascript
You might like
php操作JSON格式数据的实现代码
2011/12/24 PHP
php 无限分类 树形数据格式化代码
2016/10/11 PHP
Javascript string 扩展库代码
2010/04/09 Javascript
url地址自动加#号问题说明
2010/08/21 Javascript
QUnit jQuery的TDD框架
2010/11/04 Javascript
js获取html文件的思路及示例
2013/09/17 Javascript
chrome下jq width()方法取值为0的解决方法
2014/05/26 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
Java中Timer的用法详解
2015/10/21 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
原生JS京东轮播图代码
2017/03/22 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
2017/07/03 Javascript
javaScript动态添加Li元素的实例
2018/02/24 Javascript
深入理解Vue Computed计算属性原理
2018/05/29 Javascript
Angular angular-file-upload文件上传的示例代码
2018/08/23 Javascript
JS中数据结构之栈
2019/01/01 Javascript
node Buffer缓存区常见操作示例
2019/05/04 Javascript
js实现类似iphone的网页滑屏解锁功能示例【附源码下载】
2019/06/10 Javascript
如何实现echarts markline标签名显示自己想要的
2020/07/20 Javascript
vue 获取元素额外生成的data-v-xxx操作
2020/09/09 Javascript
[39:11]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第二局
2016/02/28 DOTA
[01:00:13]完美世界DOTA2联赛 LBZS vs Forest 第一场 11.07
2020/11/09 DOTA
Django中模型Model添加JSON类型字段的方法
2015/06/17 Python
python3.x实现发送邮件功能
2018/05/22 Python
python取余运算符知识点详解
2019/06/27 Python
python如何调用php文件中的函数详解
2020/12/29 Python
手把手教你用纯css3实现轮播图效果实例
2017/05/04 HTML / CSS
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
泰国时尚电商:POMELO Fashion
2020/03/11 全球购物
计算机专业学生的自我评价
2013/12/15 职场文书
导游实习生自荐书
2014/01/28 职场文书
讲解员培训方案
2014/05/04 职场文书
学生逃课检讨书
2015/02/17 职场文书
会计求职简历自我评价
2015/03/10 职场文书
http通过StreamingHttpResponse完成连续的数据传输长链接方式
2022/02/12 Python
sql server偶发出现死锁的解决方法
2022/04/10 SQL Server