6-动态路由

前文提到用户可以通过url访问到不属于自己权限的页面,这需要通过动态路由来解决

1.将后端返回的菜单数据存储到Cookie之后,调用状态管理中添加路由方法

javascript 复制代码
//调用store中的setMenu函数
 this.$store.commit('setMenu',data.data.data)
 // 动态路由配置
 this.$store.commit('registerouter',this.$router)
java 复制代码
//添加路由方法
//动态注册路由
registerouter(state, router) {
    // 没有数据
    if (!Cookie.get("menu"))
        return;
    //有数据
    const menu = JSON.parse(Cookie.get("menu"))
    state.menu = menu;
    //动态组装路由
    const menuArray = []
    menu.forEach(item => {
            if (item.children) { //有子菜单
                item.children = item.children.map(item => {
                    item.component = () =>
                        import (`../views/${item.url}`)
                    return item
                })
                menuArray.push(...item.children)
            } else { //没有子菜单
                item.component = () =>
                    import (`../views/${item.url}`)
                menuArray.push(item)
            }
        })
        // console.log(menuArray, "menu")
        //路由的动态添加
    menuArray.forEach(item => {
        router.addRoute('Main', item)
    })
}

3.router下的index.js文件如下

javascript 复制代码
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
    //创建路由组件
import Main from '../views/Main.vue'
import Login from '../views/Login.vue'
//将路由与组件进行映射
const routes = [

        {
            path: '/login',
            name: 'login',
            component: Login,
        },
        //主路由
        {
            path: '/',
            component: Main,
            name: 'Main',
            redirect: '/home', //路径为 / 时,重定向到home
            //子路由
            children: []
        }
    ]
    //创建router实例
const router = new VueRouter({
    routes
})
export default router

4.注意:此时虽然可以实现动态路由,但是刷新页面则会失效,在main.js文件中也需要调用添加路由方法

javascript 复制代码
new Vue({
    router, //将router挂载到vue实例上
    store, //将store挂载到vue实例上
    render: h => h(App),
    created() {
        store.commit('registerouter', router)
    }
}).$mount('#app')
相关推荐
傣味洋芋4 分钟前
WebSocket
网络·vue.js·websocket·网络协议
摘星编程6 分钟前
Flutter for OpenHarmony 实战:SliverList 滑动列表详解
android·javascript·flutter
陈_杨7 分钟前
前端成功转鸿蒙开发者真实案例,教大家如何开发鸿蒙APP-- 卡片编辑功能
前端·harmonyos
凡大来啦10 分钟前
Element plus的Select选择器点击不出现下拉列表
javascript·vue.js·elementui
jaqi.l11 分钟前
uni-app 小程序全局挂载分享功能,并动态配置页面是否可以分享
vue.js·小程序·uni-app
十年磨一剑~11 分钟前
springboot+vue+mysql手搓一个管理系统
vue.js·spring boot·mysql
Swift社区11 分钟前
Flutter 的异步问题,为什么和前端 Promise 问题高度相似?
前端·flutter
程序员Agions12 分钟前
AI 编程的"效率幻觉":为什么用了 Cursor 之后,你反而更累了?
前端·ai编程
Android技术之家14 分钟前
在手机上跑大模型?Google AI Edge Gallery 开源项目深度解析
前端·人工智能·edge·开源
DEMO派15 分钟前
CSS优先级规则以及如何提升优先级方案详解
前端·javascript·css·vue.js·reactjs·html5·angular.js