当前位置:首页 > VUE

vue实现菜单管理

2026-01-15 02:38:21VUE

Vue 实现菜单管理方案

方案一:基于路由的动态菜单 通过 Vue Router 的路由配置自动生成菜单结构,适用于权限管理系统。在路由元信息(meta)中添加菜单相关配置:

const routes = [
  {
    path: '/dashboard',
    component: Dashboard,
    meta: {
      title: '控制台',
      icon: 'el-icon-monitor',
      requiresAuth: true
    }
  },
  {
    path: '/user',
    component: UserLayout,
    meta: {
      title: '用户管理',
      icon: 'el-icon-user'
    },
    children: [
      {
        path: 'list',
        component: UserList,
        meta: { title: '用户列表' }
      }
    ]
  }
]

方案二:独立菜单数据结构 当菜单需要独立于路由存在时,可采用树形数据结构:

const menuData = [
  {
    id: 1,
    name: '系统管理',
    icon: 'setting',
    children: [
      {
        id: 11,
        name: '用户管理',
        path: '/user'
      }
    ]
  }
]

递归组件实现 创建可递归渲染的菜单组件:

vue实现菜单管理

<template>
  <ul class="menu">
    <li v-for="item in menuData" :key="item.id">
      <router-link v-if="!item.children" :to="item.path">
        <i :class="item.icon"></i>
        <span>{{ item.name }}</span>
      </router-link>
      <template v-else>
        <div class="submenu-title">
          <i :class="item.icon"></i>
          <span>{{ item.name }}</span>
        </div>
        <menu-tree :menu-data="item.children"></menu-tree>
      </template>
    </li>
  </ul>
</template>

<script>
export default {
  name: 'MenuTree',
  props: {
    menuData: Array
  }
}
</script>

状态管理集成 结合 Vuex 管理菜单状态:

// store/modules/menu.js
export default {
  state: {
    collapsed: false,
    activeMenu: ''
  },
  mutations: {
    TOGGLE_COLLAPSE(state) {
      state.collapsed = !state.collapsed
    }
  }
}

权限控制实现 根据用户角色过滤菜单项:

vue实现菜单管理

function filterMenu(menu, roles) {
  return menu.filter(item => {
    if (item.meta?.roles) {
      return item.meta.roles.some(role => roles.includes(role))
    }
    return true
  })
}

响应式布局优化 使用 CSS 媒体查询实现响应式折叠:

@media screen and (max-width: 992px) {
  .menu-container {
    width: 64px;
    overflow: hidden;
  }
}

性能优化建议

  • 对大型菜单使用虚拟滚动
  • 使用 keep-alive 缓存菜单状态
  • 对静态菜单数据进行 Object.freeze 处理

完整示例项目结构

src/
├── components/
│   ├── Menu/
│   │   ├── MenuTree.vue
│   │   └── MenuItem.vue
├── router/
│   ├── index.js
│   └── asyncRoutes.js
├── store/
│   └── modules/
│       └── menu.js
└── utils/
    └── permission.js

标签: 菜单vue
分享给朋友:

相关文章

vue实现多层评论回复

vue实现多层评论回复

Vue 实现多层评论回复 数据结构设计 多层评论通常采用嵌套结构,每个评论对象包含子评论数组。示例数据结构如下: comments: [ { id: 1, content: '父…

vue弹幕实现不重叠

vue弹幕实现不重叠

实现 Vue 弹幕不重叠的方法 CSS 定位与动画控制 通过绝对定位和动态计算弹幕轨道高度,确保弹幕在不同轨道上运行。每条弹幕占据固定高度的轨道,避免重叠。 // 弹幕轨道高度计算 const t…

vue实现微博印象

vue实现微博印象

实现微博印象功能的核心思路 微博印象功能通常指用户发布微博后,系统自动分析文本内容并提取关键词或标签,以可视化形式展示。Vue实现该功能需要结合文本分析、关键词提取和前端渲染技术。 文本分析与关键词…

vue播放倍速怎么实现

vue播放倍速怎么实现

实现Vue播放倍速的方法 在Vue中实现播放倍速功能通常涉及HTML5的<video>元素或第三方播放器库。以下是几种常见实现方式: 使用原生HTML5 video元素 通过ref获取v…

vue无限菜单怎么实现

vue无限菜单怎么实现

实现 Vue 无限菜单的方法 递归组件实现嵌套菜单 使用 Vue 的递归组件特性可以轻松实现无限级嵌套菜单。通过组件调用自身的方式处理嵌套数据。 <template> <ul&…

vue实现3d宇宙

vue实现3d宇宙

Vue实现3D宇宙效果 使用Three.js库 Three.js是一个强大的JavaScript 3D库,可以轻松集成到Vue项目中。安装Three.js依赖: npm install three…