当前位置:首页 > VUE

vue 实现菜单

2026-03-06 23:06:03VUE

Vue 实现菜单的方法

使用 v-for 动态渲染菜单项

通过 v-for 指令可以动态渲染菜单项,结合数组数据生成菜单结构。数据通常包含 namepath 字段,用于显示菜单名称和路由跳转。

<template>
  <div class="menu">
    <ul>
      <li v-for="item in menuItems" :key="item.path">
        <router-link :to="item.path">{{ item.name }}</router-link>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      menuItems: [
        { name: '首页', path: '/' },
        { name: '关于', path: '/about' },
        { name: '产品', path: '/products' }
      ]
    }
  }
}
</script>

嵌套菜单的实现

对于多级菜单,可以通过递归组件或嵌套 v-for 实现。数据中增加 children 字段表示子菜单。

<template>
  <div class="menu">
    <ul>
      <li v-for="item in menuItems" :key="item.path">
        <router-link :to="item.path">{{ item.name }}</router-link>
        <ul v-if="item.children">
          <li v-for="child in item.children" :key="child.path">
            <router-link :to="child.path">{{ child.name }}</router-link>
          </li>
        </ul>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      menuItems: [
        { 
          name: '首页', 
          path: '/',
          children: [
            { name: '子菜单1', path: '/sub1' },
            { name: '子菜单2', path: '/sub2' }
          ]
        },
        { name: '关于', path: '/about' }
      ]
    }
  }
}
</script>

使用 UI 框架快速实现

Element UI、Ant Design Vue 等框架提供了现成的菜单组件,可以快速实现复杂菜单功能。

以 Element UI 为例:

<template>
  <el-menu :default-active="activeIndex" mode="horizontal">
    <el-menu-item index="1">首页</el-menu-item>
    <el-submenu index="2">
      <template slot="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-item index="3">关于</el-menu-item>
  </el-menu>
</template>

<script>
export default {
  data() {
    return {
      activeIndex: '1'
    }
  }
}
</script>

菜单状态管理

通过 Vuex 或组件内状态管理当前激活的菜单项,实现高亮显示。

<template>
  <div class="menu">
    <ul>
      <li 
        v-for="item in menuItems" 
        :key="item.path"
        :class="{ active: currentPath === item.path }"
        @click="selectMenu(item.path)"
      >
        {{ item.name }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentPath: '/',
      menuItems: [
        { name: '首页', path: '/' },
        { name: '关于', path: '/about' }
      ]
    }
  },
  methods: {
    selectMenu(path) {
      this.currentPath = path
      this.$router.push(path)
    }
  }
}
</script>

<style>
.active {
  color: red;
  font-weight: bold;
}
</style>

响应式菜单

结合媒体查询和 Vue 数据绑定,实现移动端和桌面端的不同菜单展示方式。

vue 实现菜单

<template>
  <div>
    <button @click="showMobileMenu = !showMobileMenu">菜单</button>
    <ul :class="{ 'mobile-menu': isMobile, 'show': showMobileMenu }">
      <li v-for="item in menuItems" :key="item.path">
        <router-link :to="item.path">{{ item.name }}</router-link>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      showMobileMenu: false,
      isMobile: window.innerWidth < 768,
      menuItems: [
        { name: '首页', path: '/' },
        { name: '关于', path: '/about' }
      ]
    }
  },
  mounted() {
    window.addEventListener('resize', this.handleResize)
  },
  methods: {
    handleResize() {
      this.isMobile = window.innerWidth < 768
    }
  }
}
</script>

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

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

相关文章

vue实现频道

vue实现频道

Vue实现频道功能的方法 使用Vue Router动态路由 通过Vue Router的动态路由功能可以轻松实现频道切换。在路由配置中定义动态参数,组件内通过this.$route.params获取当前…

vue实现selectable

vue实现selectable

Vue 实现可选择的 Select 组件 在 Vue 中实现一个可选择的 Select 组件,可以通过以下几种方式: 使用原生 HTML select 元素 <template> &…

vue实现选择

vue实现选择

Vue 实现选择功能的方法 在 Vue 中实现选择功能可以通过多种方式完成,以下介绍几种常见的实现方法。 使用 v-model 绑定单选 通过 v-model 可以轻松实现单选功能。以下是一个简单的…

vue实现等级选择

vue实现等级选择

实现等级选择的方法 在Vue中实现等级选择功能,可以通过多种方式完成,以下是几种常见的实现方法: 使用v-for渲染星级选择 通过v-for指令循环渲染星级图标,结合点击事件实现等级选择: <…

vue实现数据渲染

vue实现数据渲染

Vue 数据渲染的实现方式 Vue.js 提供了多种数据渲染的方式,包括插值表达式、指令和计算属性等。以下是常见的实现方法: 插值表达式 使用双大括号 {{ }} 将数据绑定到模板中,数据变化时会自…

vue 实现页面注册

vue 实现页面注册

Vue 实现页面注册功能 创建注册表单组件 在 Vue 项目中创建一个注册表单组件,通常命名为 Register.vue。该组件包含用户名、邮箱、密码等输入字段,以及提交按钮。 <templa…