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')
相关推荐
Lanqing_07608 分钟前
京东开放平台获取京东商品详情API接口操作解答
java·前端·python·api·电商·电商数据
三翼鸟数字化技术团队10 分钟前
提升开发思维的设计模式(上)
前端·javascript·设计模式
wh_xia_jun19 分钟前
ref 应用于对象类型的一个案例
前端·javascript·vue.js
梨子同志25 分钟前
Web Storage:localStorage 与 sessionStorage
前端·javascript
绅士玖25 分钟前
从Promise到async/await:JavaScript异步编程的演进
前端·javascript
总之就是非常可爱25 分钟前
打造一个支持流式输出的 Vue Markdown 渲染组件
前端·chatgpt·markdown
3Katrina27 分钟前
从做一个播放音乐的小组件讲React的事件触发机制
前端·javascript·react.js
前端工作日常27 分钟前
学习 Vue2 自动生成的发布说明如何人工润色
vue.js
薛定谔的算法29 分钟前
JavaScript异步编程进阶:从Promise到async/await的丝滑升级
javascript
悦悦妍妍30 分钟前
Vue3 + Ant Design Vue Modal 对话框可拖拽指令
前端