当前位置:首页 > VUE

vue实现列表菜单

2026-01-18 19:19:06VUE

实现列表菜单的基本结构

在 Vue 中实现列表菜单通常使用 v-for 指令动态渲染菜单项。定义一个数组存储菜单数据,通过 v-for 遍历数组生成菜单项。

<template>
  <ul>
    <li v-for="item in menuItems" :key="item.id">
      {{ item.name }}
    </li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      menuItems: [
        { id: 1, name: '首页' },
        { id: 2, name: '产品' },
        { id: 3, name: '关于我们' }
      ]
    }
  }
}
</script>

添加点击事件和样式

为菜单项添加点击事件,使用 v-on@ 语法绑定事件。通过动态类名或内联样式为选中项添加高亮效果。

vue实现列表菜单

<template>
  <ul>
    <li 
      v-for="item in menuItems" 
      :key="item.id"
      @click="selectItem(item)"
      :class="{ active: selectedItem === item }"
    >
      {{ item.name }}
    </li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      menuItems: [
        { id: 1, name: '首页' },
        { id: 2, name: '产品' },
        { id: 3, name: '关于我们' }
      ],
      selectedItem: null
    }
  },
  methods: {
    selectItem(item) {
      this.selectedItem = item
    }
  }
}
</script>

<style>
.active {
  background-color: #f0f0f0;
  color: #42b983;
}
</style>

嵌套子菜单的实现

对于多层嵌套菜单,可以使用递归组件或嵌套的 v-for。定义一个包含子菜单项的数组结构,并在模板中递归渲染。

vue实现列表菜单

<template>
  <ul>
    <li v-for="item in menuItems" :key="item.id">
      {{ item.name }}
      <ul v-if="item.children">
        <li v-for="child in item.children" :key="child.id">
          {{ child.name }}
        </li>
      </ul>
    </li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      menuItems: [
        { 
          id: 1, 
          name: '首页',
          children: [
            { id: 11, name: '子菜单1' },
            { id: 12, name: '子菜单2' }
          ]
        },
        { id: 2, name: '产品' }
      ]
    }
  }
}
</script>

使用第三方组件库

对于更复杂的菜单需求,可以集成第三方 UI 库如 Element UI 或 Ant Design Vue。这些库提供了现成的菜单组件和丰富的功能。

<template>
  <el-menu>
    <el-menu-item index="1">首页</el-menu-item>
    <el-submenu index="2">
      <template #title>产品</template>
      <el-menu-item index="2-1">产品1</el-menu-item>
      <el-menu-item index="2-2">产品2</el-menu-item>
    </el-submenu>
  </el-menu>
</template>

<script>
import { ElMenu, ElMenuItem, ElSubmenu } from 'element-plus'

export default {
  components: {
    ElMenu,
    ElMenuItem,
    ElSubmenu
  }
}
</script>

响应式菜单设计

结合媒体查询和 Vue 的状态管理,可以实现响应式菜单。在小屏幕设备上显示折叠菜单,通过点击按钮展开。

<template>
  <button @click="toggleMenu">菜单</button>
  <ul v-show="isMenuOpen">
    <li v-for="item in menuItems" :key="item.id">
      {{ item.name }}
    </li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      menuItems: [
        { id: 1, name: '首页' },
        { id: 2, name: '产品' }
      ],
      isMenuOpen: false
    }
  },
  methods: {
    toggleMenu() {
      this.isMenuOpen = !this.isMenuOpen
    }
  }
}
</script>

<style>
@media (min-width: 768px) {
  button {
    display: none;
  }
  ul {
    display: block !important;
  }
}
</style>

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

相关文章

css制作菜单

css制作菜单

CSS 制作菜单的方法 使用 CSS 可以制作多种风格的菜单,包括水平菜单、垂直菜单、下拉菜单等。以下是几种常见的实现方式。 水平菜单 水平菜单通常用于导航栏,可以通过 display: inlin…

实现树形菜单vue

实现树形菜单vue

实现树形菜单的Vue方案 递归组件实现 创建递归组件TreeMenu.vue,通过组件自身调用自身实现无限层级渲染: <template> <ul> <li…

vue实现横排菜单

vue实现横排菜单

实现横排菜单的方法 在Vue中实现横排菜单可以通过多种方式完成,以下是几种常见的实现方法。 使用Flex布局实现横排菜单 通过CSS Flex布局可以轻松实现横排菜单,代码简洁且兼容性好。…

vue实现菜单权限

vue实现菜单权限

基于路由的动态菜单权限控制 在Vue中实现菜单权限通常需要结合路由配置和用户角色/权限数据。以下是常见的实现方法: 路由配置中添加权限标识 // router.js const routes =…

vue实现抽屉菜单

vue实现抽屉菜单

Vue 实现抽屉菜单 使用 Vue 过渡和 CSS 实现 通过 Vue 的过渡组件和 CSS 实现抽屉菜单的动画效果。定义一个布尔值控制抽屉的显示和隐藏,利用 CSS 过渡效果实现平滑的滑动。 &l…

vue实现滚动列表

vue实现滚动列表

Vue 实现滚动列表的方法 使用 CSS 实现基础滚动 通过 CSS 的 overflow 属性可以快速实现滚动效果。适用于静态列表或简单动态内容。 <template> <d…