当前位置:首页 > VUE

vue实现菜单列表

2026-02-21 07:29:10VUE

使用 Vue 实现菜单列表

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

基础菜单组件

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

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>

动态数据绑定

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

vue实现菜单列表

<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 的灵活性使得菜单实现既简单又强大。

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

相关文章

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

vue实现左右菜单联动实现

vue实现左右菜单联动实现

Vue 实现左右菜单联动 数据绑定与状态管理 在 Vue 中实现左右菜单联动,核心是通过共享状态或事件通信实现数据同步。可以通过 Vuex 或组件间的 props/emit 机制管理联动状态。 //…

css div 制作导航菜单

css div 制作导航菜单

使用 CSS 和 Div 制作导航菜单 导航菜单是网站的重要组成部分,以下是通过 CSS 和 div 元素制作导航菜单的方法。 基本 HTML 结构 创建一个简单的 div 结构作为导航菜单的基础:…

uniapp 内容列表

uniapp 内容列表

uniapp 内容列表的实现方法 在uniapp中实现内容列表通常需要结合组件和数据绑定。以下是一个常见的方法: 模板部分 <template> <view class="c…

vue实现列表分类

vue实现列表分类

Vue 实现列表分类的方法 使用计算属性分类 通过计算属性对原始数组进行分类处理,返回分组后的对象或数组。适用于静态数据或需要响应式更新的场景。 computed: { categorizedI…

纯css制作下拉菜单

纯css制作下拉菜单

使用纯CSS制作下拉菜单 HTML结构需要嵌套列表,外层为触发元素,内层为下拉内容。以下是一个基础结构示例: <div class="dropdown"> <button cl…