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

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

相关文章

vue 菜单实现

vue 菜单实现

Vue 菜单实现方法 在Vue中实现菜单功能可以通过多种方式完成,以下是几种常见的实现方法: 使用v-for动态生成菜单 通过数据驱动的方式动态渲染菜单项,适合菜单内容可能变化的场景: <t…

vue实现菜单定位

vue实现菜单定位

实现菜单定位的方法 在Vue中实现菜单定位功能,可以通过监听滚动事件或使用Intersection Observer API来判断当前显示的菜单项,并高亮对应的导航链接。以下是几种常见的实现方式:…

css二级菜单制作

css二级菜单制作

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

css制作tab菜单

css制作tab菜单

CSS制作Tab菜单的方法 HTML结构 使用无序列表和div容器构建基础结构,列表项为标签页标题,div内放置对应内容块。 <ul class="tab-menu"> <l…

vue实现菜单调用

vue实现菜单调用

Vue 实现动态菜单调用的方法 使用路由配置生成菜单 在 Vue 项目中,可以通过路由配置自动生成菜单结构。路由配置通常包含 path、name、meta 等信息,这些信息可用于构建菜单项。 //…

vue菜单实现

vue菜单实现

实现Vue菜单的基本方法 使用Vue.js创建菜单可以通过多种方式实现,包括使用原生Vue组件、第三方UI库或自定义解决方案。以下是几种常见的实现方法: 使用原生Vue组件 创建基本的菜单结构可以…