当前位置:首页 > 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 实现翻译功能的方法 使用 i18n 插件实现多语言切换 安装 vue-i18n 插件: npm install vue-i18n 创建语言资源文件(如 en.json 和 zh.json):…

vue实现标题

vue实现标题

Vue 实现标题的方法 在Vue中实现标题可以通过多种方式,以下是几种常见的方法: 方法一:使用模板语法 在Vue组件的模板中直接使用HTML的<h1>到<h6>标签来定义…

vue环境实现

vue环境实现

Vue 环境搭建 安装 Node.js 和 npm Node.js 是运行 Vue 的基础环境,npm 是包管理工具。从 Node.js 官网 下载并安装最新稳定版本。安装完成后,在终端运行以下命令验…

vue实现分站

vue实现分站

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

vue实现气泡

vue实现气泡

Vue 实现气泡效果的方法 在 Vue 中实现气泡效果可以通过 CSS 动画、第三方库或自定义组件完成。以下是几种常见实现方式: 使用纯 CSS 和 Vue 过渡 通过 Vue 的过渡系统结合 CS…

vue分页实现

vue分页实现

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