当前位置:首页 > 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
分享给朋友:

相关文章

ssh vue 实现

ssh vue 实现

使用SSH连接Vue项目部署的服务器 在Vue项目开发或部署过程中,可能需要通过SSH连接到远程服务器进行配置或维护。以下是实现SSH连接并部署Vue项目的关键步骤: 生成SSH密钥对 在本地终端运…

vue实现tag

vue实现tag

Vue 实现标签(Tag)功能 在 Vue 中实现标签(Tag)功能可以通过多种方式完成,以下是一些常见的方法和实现步骤: 使用动态组件和 v-for 通过 v-for 指令动态渲染标签列表,结合样…

vue实现尺子

vue实现尺子

Vue 实现尺子组件 实现一个尺子组件可以通过 Canvas 或纯 CSS 完成。以下是两种常见实现方式: 使用 Canvas 绘制尺子 通过 Canvas 动态绘制刻度线和数字,适合需要高精度或动…

vue 实现vshow

vue 实现vshow

Vue 实现 v-show 在 Vue 中,v-show 是一个常用的指令,用于根据条件控制元素的显示或隐藏。与 v-if 不同,v-show 不会移除 DOM 元素,而是通过 CSS 的 displ…

vue实现分站

vue实现分站

Vue 实现分站的方案 在 Vue 中实现分站功能通常涉及路由配置、环境变量管理和动态加载资源。以下是几种常见的实现方式: 基于路由的分站实现 通过 Vue Router 配置多路由,区分不同站点的…

vue分页实现

vue分页实现

实现Vue分页的几种方法 使用Element UI的分页组件 安装Element UI库后,可以直接使用其分页组件。以下是一个基本示例: <template> <div>…