当前位置:首页 > 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'
      }
    ]
  }
]

权限控制

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

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

vue层级菜单实现

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

相关文章

css二级菜单制作

css二级菜单制作

使用纯CSS实现二级菜单 通过嵌套HTML结构和CSS选择器实现二级菜单的显示与隐藏效果。以下是一个基础实现方案: HTML结构: <ul class="menu"> <…

vue实现下拉菜单

vue实现下拉菜单

实现下拉菜单的基本结构 使用 Vue 的 v-show 或 v-if 控制下拉菜单的显示与隐藏。通过点击按钮或父元素触发下拉状态切换。 <template> <div cl…

jquery菜单

jquery菜单

以下是关于使用jQuery创建交互式菜单的几种常见方法及实现示例: 基础下拉菜单实现 通过jQuery的slideToggle和toggleClass实现简单下拉效果: $('.menu-item…

vue实现菜单搜索

vue实现菜单搜索

实现思路 在Vue中实现菜单搜索功能,通常需要结合输入框的实时监听、菜单数据的过滤以及结果的动态展示。核心逻辑包括监听用户输入、过滤菜单数据、高亮匹配关键词。 基本实现步骤 创建搜索输入框 在模板中…

php 实现级联菜单

php 实现级联菜单

实现级联菜单的方法 级联菜单(Cascading Dropdown)通常用于根据前一个选择动态加载下一个菜单的选项。以下是使用PHP和JavaScript(Ajax)实现级联菜单的详细方法。 数据库…

实现树形菜单vue

实现树形菜单vue

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