当前位置:首页 > 实用技巧 >

举例说明如何实现动态路由

来源:原点资讯(www.yd166.com)时间:2023-06-27 02:41:55作者:YD166手机阅读>>

动态路由是一个常用的功能,根据后台返回的路由json表,前端动态显示可跳转的路由项,下面来讲解一下具体的实现方式:

大致业务需求:前端在login登陆页,输入账号密码后,点击登陆,接口返回登陆成功的同时,也会把该用户可操作的路由链表返回给前端(JSON数组格式),前端拿到这个JSON数组,来渲染成侧边栏列表(说的是PC端),我们需要将所有的页面都写好,然后去匹配后台返回的部分路由来进行展示(比如项目一共有100个页面,后台返回了10个路由地址,那么我们只展示返回的对应的10个即可)

说一下思路:

我们可以将路由分为3个部分

1.默认展示的部分(包括login页面、404页面等等)

2.后台返回的部分(具有权限操作的部分路由)

3.全部动态路由(比如后台返回了10个路由地址,我们全部动态的路由是100个地址,所做的就是将100个全部动态路由里面和后台返回的对应匹配的10个路由追加到默认路由里面,就可以完成动态路由的流程了)

正常路由,我们的写法大概是这样的:

//src/Router/index.js import Router from 'vue-router' Vue.use(Router) const Routes = [ { path:'/', component:Login, meta: { title: '登录页' } }, { path:'/Home', component:Home, meta: { title: 'Home主页' } } ] const Routers = new Router({ routes: Routes }) export default Routers;

我们要做动态路由,就需要改变一下这个结构(分为动态 静态),这里的静态是指需要匹配展示对应的,所以,我们需要在建一个全部的路由JSON

//stc/router/index.js const defaultRoutes = [ //...这默认路由就是上面代码内的登录页/404页面... ] const allRouters = [//这里就是全部动态路由 { path:'/UserList', component:UserList, meta: { title: '人员管理' } }, { path:'/PwdList', component:PwdList, meta: { title: '密码管理' } } ] const Routers = new Router({ routes: defaultRoutes//默认渲染 -> 默认路由 }) export default Routers;

所有的静态路由和动态路由,都写完了,接下来就是关键部分(将后台返回的路由json拼接到route内),由于我们是在login页面点击登陆后,进行的跳转,所以,把代码写到路由钩子内(Routers.beforeach函数)

Routers.beforeEach((to,from,next) => { if(to.path != '/' && !store.state.isLogin) { //跳转的不是首页 同时 用户还未登陆 //这个判断,我们就可以基本判定用户是在做登陆时候的跳转 //↓拿到登陆时,接口返回的路由数组(vuex内),大致是这样的 let resRouterArr = [ { routeName: '人员管理', children: [ { routeName: '销售管理', ... }, { routeName: '内勤管理', ... } ] } ] let routerArr = [] resRouterArr.forEach(item => { allRouters.forEach(all => { if(item.routeName == all.routeName) { //拿到本地路由对象 let obj = JSON.parse(JSON.stringify(all)) let childrenRouter = [] if(item.children && item.children.length > 0) { item.children.forEach(childItem => { all.children.forEach(allItem => { if(childItem.routeName == allItem.routerName) { childrenRouter.push(allItem) } }) }) obj.children = childrenRouter } routerArr.push(obj) } }) }) Routers.addroutes(routerArr)//addroutes为添加路由数组的方法 store.commit('domRouteTree',rousterArr)//存储进vuex,之后页面左右路由列表渲染使用 next({...to,replace:true})//进行路由跳转 } else { next() } })

这样,我们跳转到之后的业务页面,就可以看到列表左侧生成的动态路由列表了,点击左侧的几个动态生成的路由,也很nice,么得问题~

ps:这里遇到了一个坑,踩了一会儿,也记上

以前都是这样写的

import UserList from '@/views/User/UserList'

但是跳转过去之后,页面就会出现白屏报错的情况,查了半天,原来要补齐路径

import UserList from '@/views/User/UserList.vue'

解决完,还特意试了一下,加上【.vue】就没问题,去掉【.vue】就白屏 报错,真是坑了~,后来听同学说:要加.vue是因为你的user目录下对应的不是index,嗯,这样的解释理解的更透彻了!

栏目热文

coc跑团完结合集(coc跑团有哪些)

coc跑团完结合集(coc跑团有哪些)

大家好,这里是宅胖看书,今天给大家介绍的是克苏鲁元素的诸天无限流小说。本来是想搞个克苏鲁大合集的,但是数量太多,只能一个...

2023-06-27 02:22:34查看全文 >>

coc的中文全称是什么(coc的中文名称是什么)

coc的中文全称是什么(coc的中文名称是什么)

—中国领先的互联网药师集团,北京科技记者编辑协会成员单位。来药事网,加入超过4000位医院药师和医生的实名制社群,我们一...

2023-06-27 02:34:18查看全文 >>

coc跑团居住地(coc跑团指令大全)

coc跑团居住地(coc跑团指令大全)

提起克苏鲁,你可能会想到那个著名的海底大章鱼,想到它的创作者“爱手艺”大师(H.P.洛夫克拉夫特),而更资深一些的克系粉...

2023-06-27 02:03:32查看全文 >>

coc跑团信誉怎么点(coc跑团的三种用法)

coc跑团信誉怎么点(coc跑团的三种用法)

在当了四五轮的COC主持人以后,发现COC入门最困难的就是怎么样让一群对游戏一无所知的朋友能够快速上手游戏?如果你在玩游...

2023-06-27 01:59:42查看全文 >>

coc跑团常识(coc跑团特质列表)

coc跑团常识(coc跑团特质列表)

欢迎关注,获取更多游戏评测资讯,入手与否不再犹豫~喜欢的不妨点个赞唷(๑•̀ㅂ•́)و✧“我们是命运的囚徒,但偶尔我们也...

2023-06-27 02:22:04查看全文 >>

动态路由能自动获取吗(路由器静态和自动获取哪个好)

动态路由能自动获取吗(路由器静态和自动获取哪个好)

硬货分享:路由信息获取方式有哪些(3)?路由信息获取方式有哪些?动态路由就不需要人工去添加路由。动态路由是什么?动态路由...

2023-06-27 01:58:18查看全文 >>

动态路由可以嵌套动态路由吗(怎么既有静态路由又有动态路由)

动态路由可以嵌套动态路由吗(怎么既有静态路由又有动态路由)

前言:在前一篇文章中,我们说了怎样开发动态路由和动态菜单,但是之前的项目缺乏对嵌套路由的一个支持。嵌套路由是路由中提供了...

2023-06-27 02:32:43查看全文 >>

动态路由简介(动态路由有哪些)

动态路由简介(动态路由有哪些)

路由协议是路由(三层)之间信息交互的一种语言,它共享网络状态和网络可达信息,定义了路由之间通信时的使用规则,维护路由表提...

2023-06-27 02:09:35查看全文 >>

动态路由的详细说明(动态路由是怎么生成的)

动态路由的详细说明(动态路由是怎么生成的)

在上一篇文章《华为路由器实验演示:如何配置和使用动态路由协议OSPF》中,整理了关于ospf 的单区域配置,本文将对os...

2023-06-27 02:27:43查看全文 >>

静态路由加动态路由(静态路由怎么ping动态路由)

静态路由加动态路由(静态路由怎么ping动态路由)

我是把静态路由跟动态路由连在一起来做的一,静态路由的配置 1,首先,先给上图中ar7,ar8 ,ar9分配IP地址,命令...

2023-06-27 02:24:57查看全文 >>

文档排行