动态添加路由addRoutes

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>   <div id="app">
        <ul>
            <li v-if="!item.hidden" v-for="item in user" :key="item.path">
                {{item.title}}
            </li>
        </ul>
    </div>
</body>
<script src="../js/vue.js"></script>
<script src="../js/vue-router.js"></script>
<script src="../js/vuex.js"></script>
<script>
    const routes = [
        {
            path: ‘/‘,     //path就是对应导航的路径
            title: ‘首页‘  //title就是对应的导航的名字
        },
        {
            path: ‘/page1‘,
            title: ‘分页1‘
        },
        {
            path: ‘/page2‘,
            title: ‘分页2‘
        },
        {
            path: ‘/page3‘,
            title: ‘分页3‘
        },
        {
            path: ‘/page4‘,
            title: ‘分页4‘
        },
        {
            path: ‘/login‘,
            title: ‘登录‘,
            hidden: true
        },
        {
            path: ‘/404‘,
            title: ‘404‘,
            hidden: true    //隐藏不需要渲染到页面上的路由
        }
    ]
    const asyncUser = [
        {
            path: ‘/page5‘,
            title: ‘分页5‘,
            meta: {
                roles: [‘admin‘]
            }
        },
        {
            path: ‘/page6‘,
            title: ‘分页6‘,
            meta: {
                roles: [‘admin‘,‘guest‘]
            }
        }
    ]  //模拟一个登录用户
    const user = {
        role: ‘guest‘
    }
    const store = new Vuex.Store({
        state: {
            user: null,
            routes
        },
        mutations: {
            setRoutes (state, router) {
                state.routes = [...state.routes, ...router]
            },
            setUser (state, user) {
                state.user = user
            }
        }
    })
    const router = new VueRouter({
        routes
    })
    router.beforeEach((to, from, next) => {    //判断user信息是否已经获取
        if (!store.state.user) {        //根据用户的类型来生成对应的新路由
            const newRouter = asyncUser.filter(route => route.meta.roles.includes(user.role))
            //将新路由添加到路由中       router.addRoutes(newRouter)        //为了正确渲染导航,将对应的新的路由添加到vuex中
            store.commit(‘setRoutes‘, newRouter)        //将登录得到的use而添加到user中
            store.commit(‘setUser‘, user)
        }
    })
    const app = new Vue({
        el: "#app",
        router,
        store,
        computed: {
            user () {          //获取到vuex中的routes用来渲染导航
                return this.$store.state.routes
            }
        }
    })
</script>
</html>

后台权限的管理需要用到动态添加路由, 管理员的权限不一样,展示的界面不一样,登录时判断身份,获取权限, 例如:超级管理员与用户管理人员

原文地址:https://www.cnblogs.com/bao2333/p/10255267.html

时间: 2024-08-29 17:42:43

动态添加路由addRoutes的相关文章

vue动态添加路由addRoutes之不能将动态路由存入缓存

在我不知道vue的路由还可以通过addRoutes动态添加时,我只知道vue的路由都是写死在路由表中的,每当跳转时再去加载相应的路由.直到在一个新公司接到需要根据用户的权限显示不同的菜单的需求时才知道了原来vue-router还有一个addRoutes的API,立马研究了一下. router.addRoutes: 函数签名: router.addRoutes(routes: Array<RouteConfig>) 动态添加更多的路由规则.参数必须是一个符合routes选项要求的数组. 点这里去

vue-router 动态添加 路由

动态添加路由可以用了做权限管理.登录后服务器端返回权限菜单,前端动态添加路由  然后在设置菜单 1.vue-router 有方法router.addRoutes(routes) 动态添加更多的路由规则.参数必须是一个符合 routes 选项要求的数组. 使用方法 this.$router.options.routes[0].children.push({//插入路由 name:'list', path: 'list', component: resolve => require(['../tem

Camel添加路由过程

Camel添加路由一般情况下是调用CamelContext的addRoutes(RoutesBuilder builder)方法实现的,下面我们看看该方法是如何实现路由的添加的: public void addRoutes(RoutesBuilder builder) throws Exception { //调用RouteBuilder的addRoutesToCamelContext方法,并将CamelContext作为参数传递进去 builder.addRoutesToCamelContex

SpringBoot运行时动态添加数据源

此方案适用于解决springboot项目运行时动态添加数据源,非静态切换多数据源!!! 一.多数据源应用场景: 1.配置文件配置多数据源,如默认数据源:master,数据源1:salve1...,运行时动态切换已配置的数据源(master.salve1互相切换),无法在运行时动态添加配置文件中未配置的数据源. 2.配置一个默认数据源,运行时动态添加新数据源使用(本博客适用于此场景) 二.解决方案: Spring提供了AbstractRoutingDataSource用于动态路由数据源,第一种场景

vue-router 根据权限动态设置路由 theme.js&quot; as it exceeds the max of &quot;500KB&quot;.

需求: 根据不同角色的登录人,展示不同的功能模块. 前端路由在后台维护,动态注册路由. 流程: 首先,登录成功,获取token 其次,通过在请求头携带当前登录人的token,调取module的接口 axios('module.list').then(res => { if (res.data.status === 200) { this.moduleList = res.data.res; } }) 接着,处理数据格式,主要是component的格式是,例如: import(`@view/use

RecyclerView动态添加、删除及点击事件

上一节讲解了RecyclerView的三种显示方式,本节将主要研究一下RecyclerView的动态添加.删除及其单击和长按事件的处理.我们在上一节代码的基础上进行相关操作. 一.修改适配器类MyAdapter,加入添加和删除这两个方法: public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { private Context context; private List<String>

jquey学习2之jquery动态添加页面片段

第一个方法:append()方法 [1]$(selector).append(content)//向匹配的所有标签中的内容末尾处添加Html代码,会编译成页面显示. 1 <html> 2 <head> 3 <script type="text/javascript" src="/jquery/jquery.js"></script> 4 <script type="text/javascript&quo

js实现表格行的动态添加------Day56

现代页面通常都是用div+css来进行设计,几乎很少再有用table来进行布局的了,但是这并不意味着table的重要性就降低了,事实上,table在数据处理上有着它独特的优势,所以对table的掌握还是很有必要的. 我们首先要记录的问题是:js动态的添加表格的行和列 我们先给定一个table,先用html语言编写下: <table width="100%" height="300px" border="1px" id="tad&q

微信小程序--动态添加class样式

尺寸单位: rpx(responsive pixel): 可以根据屏幕宽度进行自适应.规定屏幕宽为750rpx.如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素.所以用rpx可解决适配问题 样式导入: /** app.wxss **/ @import "common.wxss"; 内联样式: 框架组件上支持使用 style.class 属性来控制组件的样式. style:静