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')
相关推荐
极客小云2 分钟前
【React + TypeScript 实现高性能多列多选组件】
前端·react.js·typescript
bin91536 分钟前
(文后附完整代码)html+css+javascript 弹球射击游戏项目分析
前端·javascript·css·游戏·html·前端开发
qq_459558697 分钟前
使用DrissionPage打开Edge
前端·edge
二哈喇子!8 小时前
BOM模型
开发语言·前端·javascript·bom
二哈喇子!8 小时前
Vue2 监听器 watcher
前端·javascript·vue.js
yanyu-yaya9 小时前
前端面试题
前端·面试·前端框架
二哈喇子!9 小时前
使用NVM下载Node.js管理多版本
前端·npm·node.js
GGGG寄了9 小时前
HTML——文本标签
开发语言·前端·html
摘星编程10 小时前
在OpenHarmony上用React Native:ActionSheet确认删除
javascript·react native·react.js
2501_9445215910 小时前
Flutter for OpenHarmony 微动漫App实战:推荐动漫实现
android·开发语言·前端·javascript·flutter·ecmascript