当前位置:首页 > VUE

vue层级菜单实现

2026-01-19 03:15:18VUE

Vue 层级菜单实现方法

递归组件实现

使用递归组件可以高效处理无限层级的菜单结构。定义一个组件,内部调用自身渲染子菜单。

<template>
  <ul>
    <li v-for="item in menuData" :key="item.id">
      {{ item.name }}
      <menu-item v-if="item.children" :menu-data="item.children"/>
    </li>
  </ul>
</template>

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

动态路由绑定

结合Vue Router实现菜单路由跳转,通过router-link绑定路由路径。

<router-link 
  v-for="item in menuList" 
  :to="item.path" 
  :key="item.id"
>
  {{ item.title }}
  <span v-if="item.children" class="arrow"></span>
</router-link>

状态管理

使用Vuex或Pinia管理菜单展开/折叠状态,确保多级菜单交互一致性。

// store示例
state: {
  expandedMenuIds: []
},
mutations: {
  toggleMenu(state, menuId) {
    const index = state.expandedMenuIds.indexOf(menuId)
    index === -1 
      ? state.expandedMenuIds.push(menuId)
      : state.expandedMenuIds.splice(index, 1)
  }
}

样式处理

通过CSS实现菜单缩进和动画效果,增强视觉层次感。

.menu-item {
  padding-left: 20px;
  transition: all 0.3s;
}
.sub-menu {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.3s ease-out;
}
.sub-menu.expanded {
  max-height: 500px;
}

性能优化

对于大型菜单数据,可采用虚拟滚动技术减少DOM节点数量。

<virtual-list 
  :size="40"
  :remain="8"
  :data="flattenMenuData"
>
  <template v-slot="{ item }">
    <menu-item :item="item"/>
  </template>
</virtual-list>

数据格式规范

推荐使用标准化的菜单数据结构,便于组件处理。

const menuData = [
  {
    id: 1,
    name: '一级菜单',
    icon: 'folder',
    children: [
      {
        id: 11,
        name: '二级菜单',
        path: '/submenu'
      }
    ]
  }
]

权限控制

结合角色权限过滤可见菜单项,实现动态菜单渲染。

vue层级菜单实现

computed: {
  filteredMenu() {
    return this.menuData.filter(item => 
      this.$auth.hasPermission(item.requiredRole)
    )
  }
}

标签: 层级菜单
分享给朋友:

相关文章

vue菜单tab实现

vue菜单tab实现

Vue 菜单 Tab 实现方法 使用动态组件切换内容 通过 Vue 的 component 动态组件结合 v-for 渲染菜单项,点击时切换显示内容: <template> <…

vue elementui实现菜单

vue elementui实现菜单

使用 Vue 和 Element UI 实现菜单 Element UI 提供了 el-menu 组件,可以轻松实现导航菜单功能。以下是一个完整的实现示例: 安装 Element UI 确保项目已安装…

css制作二级菜单

css制作二级菜单

CSS制作二级菜单的方法 通过纯CSS实现二级菜单主要依赖HTML结构嵌套和CSS的:hover伪类选择器。以下是具体实现方式: HTML结构 <ul class="main-menu"&g…

实现树形菜单vue

实现树形菜单vue

实现树形菜单的Vue方案 递归组件实现 创建递归组件TreeMenu.vue,通过组件自身调用自身实现无限层级渲染: <template> <ul> <li…

vue实现菜单递归

vue实现菜单递归

Vue 实现菜单递归的方法 在 Vue 中实现菜单递归通常需要组件调用自身,适用于多级嵌套的菜单结构。以下是几种常见的实现方式: 使用递归组件 递归组件是 Vue 中实现菜单递归的最直接方法。组件通…

vue  简单菜单实现

vue 简单菜单实现

实现简单菜单的步骤 在 Vue 中实现一个简单的菜单,可以通过以下方法完成: 使用 v-for 动态渲染菜单项 在 Vue 的模板中,使用 v-for 遍历菜单数据,动态生成菜单项。 <…