当前位置:首页 > VUE

菜单树实现vue

2026-03-10 11:01:55VUE

实现 Vue 菜单树的方法

使用递归组件实现菜单树

递归组件是 Vue 中实现树形结构的常用方法。通过组件调用自身,可以轻松处理嵌套的菜单数据。

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

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

使用第三方库

对于更复杂的需求,可以考虑使用专门处理树形结构的 Vue 组件库:

  • Vue Tree:轻量级树组件
  • Element UI Tree:功能丰富的企业级树组件
  • Vuetify Treeview:Material Design 风格的树组件

动态加载菜单数据

菜单树实现vue

当菜单数据量较大时,可以采用动态加载的方式优化性能:

methods: {
  loadChildren(parentId) {
    api.getMenuChildren(parentId).then(children => {
      this.$set(this.menuData, parentId, children)
    })
  }
}

样式和交互优化

为菜单树添加展开/折叠功能:

菜单树实现vue

<template>
  <ul>
    <li v-for="item in menuData" :key="item.id">
      <span @click="toggle(item)">
        {{ item.name }}
        <span v-if="item.children">[{{ item.expanded ? '-' : '+' }}]</span>
      </span>
      <menu-tree 
        v-if="item.children && item.expanded" 
        :menu-data="item.children">
      </menu-tree>
    </li>
  </ul>
</template>

<script>
export default {
  methods: {
    toggle(item) {
      this.$set(item, 'expanded', !item.expanded)
    }
  }
}
</script>

路由集成

将菜单树与 Vue Router 集成,实现导航功能:

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

权限控制

根据用户权限过滤显示的菜单项:

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

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

相关文章

vue表格重置怎么实现

vue表格重置怎么实现

重置表格数据的方法 在Vue中重置表格数据通常需要操作绑定的数据源,以下是几种常见实现方式: 直接重置数据源 // 假设表格绑定的是tableData this.tableData = [...t…

vue 指令实现

vue 指令实现

Vue 指令实现 Vue 指令是 Vue.js 提供的特殊属性,用于在 DOM 元素上添加特殊行为。指令以 v- 前缀开头,例如 v-model、v-if、v-for 等。以下是实现自定义指令和常用内…

vue实现$.extend

vue实现$.extend

Vue 实现类似 jQuery 的 $.extend 功能 在 Vue 中实现类似 jQuery 的 $.extend 功能,可以通过多种方式完成。$.extend 主要用于合并多个对象的属性,Vue…

vue实现erp

vue实现erp

Vue实现ERP系统的关键步骤 技术选型与架构设计 采用Vue 3 + TypeScript构建前端,搭配Pinia状态管理,Element Plus或Ant Design Vue作为UI框架。后端可…

vue 实现搜索

vue 实现搜索

实现 Vue 搜索功能 在 Vue 中实现搜索功能通常涉及以下几个关键步骤: 数据绑定与输入监听 使用 v-model 双向绑定搜索输入框的值,监听用户输入: <template>…

vue实现datalist

vue实现datalist

使用 Vue 实现 HTML5 的 datalist 功能 HTML5 的 <datalist> 元素提供了一种自动完成输入框的功能,允许用户在输入时从预定义的选项列表中选择。以下是几种在…