当前位置:首页 > 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管理菜单展开/折叠状态,确保多级菜单交互一致性。

vue层级菜单实现

// 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节点数量。

vue层级菜单实现

<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)
    )
  }
}

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

相关文章

纯css制作tab菜单

纯css制作tab菜单

纯CSS制作Tab菜单的方法 使用radio input控制Tab切换 通过<input type="radio">和<label>元素配合:checked伪类实现Tab切换效…

vue实现菜单效果

vue实现菜单效果

Vue实现菜单效果的方法 基础菜单实现 使用Vue的v-for指令和v-show/v-if可以快速实现基础菜单。通过数据驱动的方式渲染菜单项,结合事件处理实现交互。 <template>…

vue实现层级表单

vue实现层级表单

Vue 实现层级表单的方法 递归组件实现嵌套表单 使用递归组件可以轻松处理无限层级的表单结构。定义一个组件,该组件能够调用自身来渲染子表单。 <template> <div&g…

vue 树形菜单实现

vue 树形菜单实现

Vue 树形菜单实现方法 递归组件实现 递归组件是Vue中实现树形结构的常见方式。通过组件调用自身实现无限层级嵌套。 <template> <ul> <li…

vue实现三栏菜单

vue实现三栏菜单

使用Vue实现三栏菜单 三栏菜单通常由左侧导航栏、中间内容区和右侧辅助栏组成。以下是实现方法: 基础结构 在Vue组件中定义三栏的HTML结构: <template> <di…

vue实现菜单页面切换

vue实现菜单页面切换

Vue 实现菜单页面切换的方法 使用 Vue Router 实现路由切换 安装 Vue Router 并配置路由表。在 router/index.js 中定义路由路径和对应的组件: import {…