vue2动态路由实现

devtools/2024/11/14 12:47:43/

实现一个简单的动态路由:

1、先定义菜单页面组件的结构,使用的是elementUI的NavMenu 导航菜单

javascript"><template><div><el-menu default-active="1" router><el-submenu :index="item.path" v-for="item in menu_data" router><template slot="title"><i :class="item.meta.icon"></i>{{ item.meta.title }}</template><el-menu-item :index="childItem.path" v-for="childItem in item.children" :key="childItem.name">{{ childItem.meta.title }}</el-menu-item></el-submenu></el-menu></div>
</template><script>
export default {data () {return {menu_data: [{name: '定时任务管理',icon: 'location',path: '/home/robotManage',child: [{name: '机器人管理',path: '/home/robotManage',},{name: '定时任务管理',path: '/home/timerTask',},],},{name: '资源管理',icon: 'github',path: '/home/robotPerson',child: [{name: '个人资源',path: '/home/robotPerson',},{name: '部门资源',path: '/home/robotPart',},{name: '公开资源',path: '/home/robotOpen',},],},{name: '考勤组管理',icon: 'laptop',path: 'home/department',child: [{name: '部门考勤管理',path: '/home/department',},{name: '考勤组管理',path: '/home/group',},],},],}
}
</script>
效果:

2、路由部分的代码,定义需要的路由,router中index.js。

javascript">import Vue from 'vue'
import VueRouter from 'vue-router'
// 引入路由组件
import robotManage from '@/views/robotManage'
import timerTask from '@/views/timerTask'
import getmsg from '@/views/getmsg'
import login from '@/components/login.vue'
import home from '@/views/home.vue'
import robotPerson from '@/views/robotPerson.vue'
import robotPart from '@/views/robotPart.vue'
import robotOpen from '@/views/robotOpen'
import group from '@/views/group'
import department from '@/views/department'// 配置路由
export  default new VueRouter({// 路由routes: [// 登录{path: '/',name: 'login',component: login,},// home{path: '/home',name: 'home',component: home,children: [// 机器人管理{path: '/home/robotManage',name: 'robotManage',component: robotManage,},// 时间管理{path: '/home/timerTask',name: 'timerTask',component: timerTask},// 收集简书地址链接{path: '/home/getmsg',name: 'getmsg',component: getmsg},// 机器人个人问答页面{path: '/home/robotPerson',name: 'robotPerson',component: robotPerson},// 机器人部门问答页面{path: '/home/robotPart',name: 'robotPart',component: robotPart},// 机器人公开问答页面{path: '/home/robotOpen',name: 'robotOpen',component: robotOpen},{path: '/home/group',  // 路由参数component: group, // 对应的页面组件},{path: '/home/department',component: department},]},],
})

3、定义store,在state中增加属性menu_data

javascript">import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)export default new Vuex.Store({state: {menu_data: []},mutations: {setMenuData (state, data) {state.menu_data = data}}
})

4、在router路由中使用前置路由守卫beforeEach获取数据,并且提交到store。

在前置路由守卫中,用用户动态路由接口,拿到后台传递过来的该用户的菜单权限数据,把原来定义的menu_data数据换成该用户的菜单权限数据。

这一步是在router中发起用户动态路由请求,并且把获取到的用户的菜单权限数据提交到store

javascript">// 前置路由守卫:to是要进入的目标路由对象,from是当前导航正在离开的路由,next函数用于放行或跳转路由
router.beforeEach((to, from, next) => {// 首先放行路由next()// 然后发起请求reqGetRouter().then((res) => {// 用于触发一个 mutation从而实现state状态更新,// 第一个参数是mutations中定义的方法名,第二个为需要传递的数据store.commit('setMenuData', res.data)console.log(store.state.menu_data, '前置路由守卫调用接口后获取的状态')}).catch((error) => {console.error('请求路由数据失败:', error)})
})

5、data里面的属性menu_data不能直接返回了,需通过computed来返回,并且返回的值是从store里面获取的

javascript">computed:{menu_data:{get(){return this.$store.state.menu_data}}
}

6、完整代码

javascript"><template><el-menu default-active="1" router><el-submenu :index="item.path" v-for="item in menu_data" router><template slot="title"><i :class="item.meta.icon"></i>{{ item.meta.title }}</template><el-menu-item :index="childItem.path" v-for="childItem in item.children" :key="childItem.name">{{ childItem.meta.title }}</el-menu-item></el-submenu></el-menu>
</template><script>
export default {computed: {menu_data: {get () {return this.$store.state.menu_data}}}
}
</script>


http://www.ppmy.cn/devtools/52214.html

相关文章

敏捷测试:方法和实践

敏捷测试&#xff1a;方法和实践 前言1. 敏捷团队组织构成与任务2. 测试驱动开发&#xff08;TDD&#xff09;3. 递增型迭代测试模型4. 静态测试的重要性5. 测试计划与管理6. 敏捷测试活动时间表结论 前言 敏捷测试的实践是将敏捷开发原则和方法运用到测试过程中&#xff0c;以…

面试计算机网络八股文十问十答第十期

面试计算机网络八股文十问十答第十期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;SACK 的引入是为了解决…

2024年6月四六级考试复盘

一、考试情况 1.1四级考试情况 听力&#xff1a;一开始没有进入状态。总共对了9道。7.1*37.1*314.2*3 8.2 新闻听力&#xff1a;3/7 长对话&#xff1a;3/8 讲座/讲话&#xff1a;3/10 阅读&#xff1a;3.55*7 7.1*8 14.2 * 7 181.05 选词填空&#xff1a;保守估计7/1…

9种编程语言的对比分析

在当今的软件开发领域&#xff0c;编程语言扮演着至关重要的角色。不同的编程语言各有其特点和适用场景&#xff0c;选择合适的编程语言能够提高开发效率和软件质量。本文将对十种常见的编程语言进行对比分析&#xff0c;帮助读者了解它们的优缺点和适用场景。 Java 特点&…

Selenium 保存会话信息避免重复登录实战!

前言 • 在一些实际开发场景中&#xff0c;我们在使用 Selenium 做自动化测试时需要保留用户的会话信息&#xff0c;从而避免重复登录&#xff0c;今天这篇文章就带大家实战如何使用 Selenium 保存会话信息。 版本 • Python 3.x 整体思路 • 当我们打开页面时&#xff0c;…

第十章:MongoDB

MongoDB 文章目录 MongoDB一、简介1.1 MongoDB 是什么1.2 数据库是什么1.3 数据库的作用1.4 数据库管理数据的特点1.5 为什么选择 MongoDB 二、核心概念三、下载安装与启动&#xff08;1&#xff09;配置步骤如下&#xff1a;&#xff08;2&#xff09;启动服务&#xff1a; 四…

如何利用TikTok矩阵源码实现自动定时发布和高效多账号管理

在如今社交媒体的盛行下&#xff0c;TikTok已成为全球范围内最受欢迎的短视频平台之一。对于那些希望提高效率的内容创作者而言&#xff0c;手动发布和管理多个TikTok账号可能会是一项繁琐且耗时的任务。幸运的是&#xff0c;通过利用TikTok矩阵源码&#xff0c;我们可以实现自…

Java:113-Spring Data JPA详解

Spring Data JPA详解 Spring Data Jpa 是应用于Dao层的⼀个框架&#xff0c;简化数据库开发的&#xff0c;作用和Mybatis框架⼀样&#xff0c;但是在使用方式和底层机制是有所不同的&#xff0c;最明显的⼀个特点&#xff0c;Spring Data Jpa 开发Dao的时候&#xff0c;很多场景…