当前位置:首页 > 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 实现文档的方法 在 Vue 中实现文档功能可以通过多种方式,包括使用富文本编辑器、Markdown 解析或直接渲染 HTML。以下是几种常见的实现方法。 使用富文本编辑器 富文本编辑器如 T…

vue实现组件循环

vue实现组件循环

Vue 组件循环的实现方法 在 Vue 中实现组件循环通常使用 v-for 指令,可以循环渲染数组或对象的数据到组件上。 基本数组循环 通过 v-for 指令遍历数组,渲染多个相同结构的组件。…

vue实现查询替换

vue实现查询替换

Vue 实现查询替换功能 在 Vue 中实现查询替换功能,可以通过数据绑定和字符串操作方法结合实现。以下是具体实现方式: 基础实现 <template> <div>…

vue实现ai

vue实现ai

Vue 实现 AI 功能 Vue.js 可以通过集成第三方 AI 服务或本地 AI 模型来实现 AI 功能。以下是几种常见的方法: 集成第三方 AI API 使用 Vue 调用如 OpenAI、Go…

vue实现iframe

vue实现iframe

Vue 中实现 iframe 的方法 在 Vue 项目中,可以通过多种方式实现 iframe 的嵌入。以下是几种常见的方法: 使用原生 HTML iframe 标签 直接在 Vue 组件的模板中使…

实现vue组件

实现vue组件

Vue 组件的基本实现 Vue 组件是 Vue.js 的核心特性之一,允许将 UI 拆分为独立、可复用的模块。以下是实现 Vue 组件的几种方式: 单文件组件 (SFC) 使用 .vue 文件格式…