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')
相关推荐
前端 贾公子6 分钟前
uni-app工程化实战:基于vue-i18n和i18n-ally的国际化方案 (上)
前端·javascript·vue.js
喵个咪22 分钟前
基于 Flutter 的 Headless CMS 全平台前端架构:技术解析与二次开发导引
前端·flutter·cms
vim怎么退出44 分钟前
Dive into React——Diff 算法
前端·react.js·源码阅读
半个落月1 小时前
面试必问的 JS 原型链,我用 16 个示例给你彻底讲明白
javascript
拾年2751 小时前
别调 BERT 了:我用 Prompt 做了套 NLP 系统,20 分钟搞定
前端·人工智能
丷丩1 小时前
12. 渲染:MapLibre GL JS 集成与多源瓦片联动
javascript·矢量瓦片·maplibre gl js·地图服务器
半个落月1 小时前
别再死记变量提升了——从 V8 编译过程真正理解 JS 执行机制
前端
橘子星1 小时前
别再懵圈!JS 执行机制的 “千层套路” 全揭秘
前端·javascript
GuWenyue1 小时前
LeetCode 76 最小覆盖子串|JS 滑动窗口标准解法
前端·算法·面试
YHHLAI1 小时前
前端 HTTP 请求 & LLM 接口开发
前端·网络协议·http