当前位置:首页 > VUE

vue实现菜单列表

2026-02-21 07:29:10VUE

使用 Vue 实现菜单列表

Vue 可以通过组件化和数据绑定的方式轻松实现菜单列表功能。以下是一个完整的实现方案:

基础菜单组件

创建一个基础的菜单组件 Menu.vue

<template>
  <ul class="menu">
    <li v-for="item in menuItems" :key="item.id">
      <a :href="item.link">{{ item.text }}</a>
    </li>
  </ul>
</template>

<script>
export default {
  props: {
    menuItems: {
      type: Array,
      required: true
    }
  }
}
</script>

<style>
.menu {
  list-style: none;
  padding: 0;
}
.menu li {
  padding: 8px 16px;
}
.menu li a {
  text-decoration: none;
  color: #333;
}
.menu li:hover {
  background-color: #f5f5f5;
}
</style>

多级嵌套菜单

对于多级菜单,可以使用递归组件:

<template>
  <ul class="menu">
    <li v-for="item in items" :key="item.id">
      <a v-if="!item.children" :href="item.link">{{ item.text }}</a>
      <template v-else>
        <span @click="toggle(item)">{{ item.text }}</span>
        <Menu v-if="item.expanded" :items="item.children" />
      </template>
    </li>
  </ul>
</template>

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

动态数据绑定

在父组件中使用动态数据:

<template>
  <div>
    <Menu :items="menuData" />
  </div>
</template>

<script>
import Menu from './Menu.vue'

export default {
  components: { Menu },
  data() {
    return {
      menuData: [
        {
          id: 1,
          text: '首页',
          link: '/'
        },
        {
          id: 2,
          text: '产品',
          children: [
            {
              id: 21,
              text: '产品1',
              link: '/product1'
            }
          ]
        }
      ]
    }
  }
}
</script>

使用 Vue Router 集成

如果项目使用 Vue Router,可以这样实现导航:

<template>
  <ul class="menu">
    <li v-for="route in routes" :key="route.path">
      <router-link :to="route.path">{{ route.meta.title }}</router-link>
    </li>
  </ul>
</template>

<script>
export default {
  computed: {
    routes() {
      return this.$router.options.routes.filter(r => r.meta?.showInMenu)
    }
  }
}
</script>

响应式菜单

添加响应式功能,在小屏幕下显示汉堡菜单:

<template>
  <div>
    <button @click="showMobileMenu = !showMobileMenu">☰</button>
    <div :class="{ 'mobile-menu': true, 'visible': showMobileMenu }">
      <Menu :items="menuData" />
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      showMobileMenu: false
    }
  }
}
</script>

<style>
.mobile-menu {
  display: none;
}
.mobile-menu.visible {
  display: block;
}
@media (min-width: 768px) {
  .mobile-menu {
    display: block;
  }
}
</style>

这些实现方式可以根据具体需求进行组合和扩展,Vue 的灵活性使得菜单实现既简单又强大。

vue实现菜单列表

标签: 菜单列表
分享给朋友:

相关文章

vue实现左右菜单

vue实现左右菜单

实现左右菜单的基本思路 使用Vue实现左右菜单通常需要两个主要组件:左侧的导航菜单和右侧的内容区域。左侧菜单用于导航,右侧区域根据菜单选择动态展示内容。 创建左侧菜单组件 左侧菜单通常是一个列表,…

vue实现菜单调用

vue实现菜单调用

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

css制作下拉菜单

css制作下拉菜单

使用纯CSS制作下拉菜单 通过HTML和CSS可以创建无需JavaScript的下拉菜单,主要利用:hover伪类和display属性控制显示隐藏。 HTML结构示例: <div class…

vue实现菜单管理

vue实现菜单管理

Vue 实现菜单管理方案 方案一:基于路由的动态菜单 通过 Vue Router 的路由配置自动生成菜单结构,适用于权限管理系统。在路由元信息(meta)中添加菜单相关配置: const rout…

vue实现列表权限

vue实现列表权限

实现列表权限控制的方法 在Vue中实现列表权限控制通常涉及前端逻辑与后端数据的配合。以下是几种常见方法: 基于角色或权限码的渲染控制 通过v-if或v-show指令根据用户权限动态渲染列表项: &…

css制作二级菜单

css制作二级菜单

CSS制作二级菜单的方法 通过纯CSS实现二级菜单主要依赖HTML结构嵌套和CSS的:hover伪类选择器。以下是具体实现方式: HTML结构 <ul class="main-menu"…