bootstrap table传回的数据后端怎么获取_vue如何根据后端返回的路由数据生成导航...

vue如何根据后端返回的路由数据生成导航

394670516a64774a4c3c9a3b65b9ae77.gif

根据不同的路由生成不同的导航,也叫做vue动态路由。vue项目实现动态路由的方式大体可分为两种:

  1. 前端控制路由:前端这边把路由写好,登录的时候根据用户的角色权限来动态展示路由

  2. 后端处理路由:后台传来当前用户对应权限的路由表,前端通过调接口拿到后处理

这两种方法各有优点,效果都能实现,我是通过第二中种方法实现的,原因就是项目里有一个专门的用户中心,里边逻辑很复杂,不好返给前端用户权限。

8ced26c70f0e22627cc770df70ee6f9f.gif

01

整体思路

394670516a64774a4c3c9a3b65b9ae77.gif

拦截路由->后台取到路由->保存路由到localStorage(用户登录进来只会从后台取一次,其余都从本地取,所以用户,只有退出在登录路由才会更新)

02

路由表

394670516a64774a4c3c9a3b65b9ae77.gif

每个路由都使用到组件Layout,这个组件是整体的页面布局:左侧菜单列,上边头部导航、右侧页面,所以children下边的第一级路由就是你自己的开发的页面,meta里包含着路由的名字,以及路由对应的icon;
因为可能会有多级菜单,所以会出现children下边嵌套children的情况;
路由应该是数组格式。

{       

 "path": "/example",       

 "component": "Layout",       

 "redirect": "/example/table",        "name": "Example",       

 "meta": {          

 "title": "案例",         

 "icon": "example"
       },       

 "children": [
         {           

 "path": "table",           

 "name": "Table",            

"component": "table/index",            "meta": {             

 "title": "表格",              

 "icon": "table"
           }
         },
         {            

 "path": "tree",           

 "name": "Tree",           

 "component": "tree/index",            "meta": {             

 "title": "树形菜单",             

 "icon": "tree"
           }
         }
       ]
     },

02

使用beforeEach、addRoutes、localStorage来配合实现

394670516a64774a4c3c9a3b65b9ae77.gif

var getRouter //用来获取后台拿到的路由

router.beforeEach((to, from, next) => {  if (!getRouter) {//不加这个判断,路由会陷入死循环
   if (!getObjArr('router')) {

axios

.get('https://www.easymock.com/mock/5a5d

a330d9b48c260cb42ca8/example/antrouter')

.then(res => {

getRouter = res.data.data.router//后台拿到路由
       saveObjArr('router', getRouter) //存储路由到localStorage
       routerGo(to, next)//执行路由跳转方法
     })

} else {//从localStorage拿到了路由
     getRouter = getObjArr('router')//拿到路由
     routerGo(to, next)
   }
 } else {
   next()
 }
})

03

拿到遍历好的路由,进行左侧菜单渲染

394670516a64774a4c3c9a3b65b9ae77.gif

边第三部会给 global.antRouter赋值,这是一个

全局变量(可以用vuex替代),菜单那边拿到路

由,进行渲染.

 

:index="menu.Url" >

          {{menu.Name}}

:index="menuChild.Url" 

style="padding-left: 60px;">{{menuChild.Name}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值