当前位置:首页 > VUE

vue实现菜单树

2026-02-18 16:41:14VUE

实现菜单树的基本思路

在Vue中实现菜单树通常需要结合递归组件或第三方库(如Element UI的Tree组件)。核心是将嵌套的菜单数据渲染为可展开/折叠的树形结构。

使用递归组件实现

递归组件适合自定义程度高的场景,以下是一个基础实现示例:

vue实现菜单树

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

<script>
export default {
  name: 'MenuTree',
  props: {
    menuData: {
      type: Array,
      required: true
    }
  }
}
</script>

使用Element UI Tree组件

若项目使用Element UI,可直接使用其Tree组件:

<template>
  <el-tree
    :data="menuData"
    :props="defaultProps"
    @node-click="handleNodeClick">
  </el-tree>
</template>

<script>
export default {
  data() {
    return {
      menuData: [{
        label: '一级菜单',
        children: [{
          label: '二级菜单'
        }]
      }],
      defaultProps: {
        children: 'children',
        label: 'label'
      }
    }
  },
  methods: {
    handleNodeClick(data) {
      console.log(data)
    }
  }
}
</script>

动态加载菜单数据

当菜单数据需要异步获取时:

vue实现菜单树

methods: {
  fetchMenuData() {
    axios.get('/api/menu').then(response => {
      this.menuData = response.data
    })
  }
},
created() {
  this.fetchMenuData()
}

添加样式和交互

为递归组件添加基础样式和交互:

ul {
  list-style-type: none;
  padding-left: 20px;
}
li {
  cursor: pointer;
  padding: 5px 0;
}
li:hover {
  background-color: #f5f5f5;
}

处理权限菜单

如需根据权限过滤菜单:

computed: {
  filteredMenu() {
    return this.menuData.filter(menu => {
      return this.checkPermission(menu.permission)
    })
  }
}

注意事项

  • 递归组件必须设置name属性
  • 树形数据结构应包含唯一标识字段(通常为id
  • 大数据量时考虑使用虚拟滚动优化性能
  • 复杂交互建议使用成熟组件库(如Element UI、Ant Design Vue等)

标签: 菜单vue
分享给朋友:

相关文章

vue实现tab标签

vue实现tab标签

Vue 实现 Tab 标签的方法 使用动态组件和 v-for 渲染标签 通过 v-for 循环生成标签页标题,结合 v-bind:class 动态切换激活状态。使用 v-show 或动态组件 <…

vue登录逻辑的实现

vue登录逻辑的实现

Vue 登录逻辑实现 前端实现 创建登录组件 在 Vue 项目中创建一个登录组件,通常命名为 Login.vue。该组件包含表单元素,如用户名和密码输入框,以及提交按钮。 <template&…

vue实现下拉框删除

vue实现下拉框删除

Vue 实现下拉框删除功能 在Vue中实现下拉框的删除功能通常涉及以下步骤: 数据绑定与渲染 在Vue组件中定义数据数组用于存储下拉框选项: data() { return { op…

vue实现mvc

vue实现mvc

Vue 实现 MVC 模式 Vue 本身是一个 MVVM(Model-View-ViewModel)框架,但可以通过结构调整实现 MVC(Model-View-Controller)模式。以下是具体实…

vue实现贴图

vue实现贴图

Vue 实现贴图功能 在Vue中实现贴图功能通常涉及将图片动态添加到指定位置或元素上。以下是几种常见实现方式: 使用v-bind动态绑定图片 通过数据驱动的方式动态更换图片源: <templ…

vue实现图库

vue实现图库

Vue 实现图库的基本方法 使用 Vue 实现图库功能可以通过多种方式完成,以下是一些常见的方法和实现步骤。 使用 Vue 和第三方库(如 Vue Gallery) 安装 vue-gallery 或…