当前位置:首页 > VUE

vue实现menu

2026-01-07 23:17:09VUE

Vue 实现 Menu 的方法

使用 Element UI 的 Menu 组件

Element UI 提供了现成的 Menu 组件,适合快速实现导航菜单。安装 Element UI 后,可以直接使用 el-menu 组件。

vue实现menu

<template>
  <el-menu
    :default-active="activeIndex"
    class="el-menu-demo"
    mode="horizontal"
    @select="handleSelect"
  >
    <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-item index="3">关于我们</el-menu-item>
  </el-menu>
</template>

<script>
export default {
  data() {
    return {
      activeIndex: '1'
    };
  },
  methods: {
    handleSelect(key, keyPath) {
      console.log(key, keyPath);
    }
  }
};
</script>

自定义实现 Menu

如果需要完全自定义的菜单,可以通过 Vue 的动态组件和递归组件实现。

vue实现menu

<template>
  <ul class="menu">
    <li v-for="item in menuItems" :key="item.id">
      <a :href="item.url">{{ item.title }}</a>
      <ul v-if="item.children" class="submenu">
        <li v-for="child in item.children" :key="child.id">
          <a :href="child.url">{{ child.title }}</a>
        </li>
      </ul>
    </li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      menuItems: [
        {
          id: 1,
          title: '首页',
          url: '/'
        },
        {
          id: 2,
          title: '产品',
          url: '#',
          children: [
            {
              id: 21,
              title: '产品1',
              url: '/product1'
            },
            {
              id: 22,
              title: '产品2',
              url: '/product2'
            }
          ]
        }
      ]
    };
  }
};
</script>

<style>
.menu {
  list-style: none;
  padding: 0;
}
.submenu {
  padding-left: 20px;
}
</style>

使用 Vue Router 实现路由菜单

结合 Vue Router 可以实现基于路由的菜单导航,适合单页应用(SPA)。

<template>
  <nav>
    <router-link to="/">首页</router-link>
    <router-link to="/products">产品</router-link>
    <router-link to="/about">关于我们</router-link>
  </nav>
</template>

<script>
export default {
  name: 'NavMenu'
};
</script>

<style>
nav a {
  margin-right: 10px;
  text-decoration: none;
  color: #333;
}
nav a.router-link-exact-active {
  color: #42b983;
}
</style>

递归组件实现多级菜单

对于复杂的多级菜单,可以使用递归组件动态渲染。

<template>
  <ul>
    <MenuItem
      v-for="item in menuData"
      :key="item.id"
      :item="item"
    />
  </ul>
</template>

<script>
import MenuItem from './MenuItem.vue';

export default {
  components: { MenuItem },
  data() {
    return {
      menuData: [
        {
          id: 1,
          title: '首页',
          children: []
        },
        {
          id: 2,
          title: '产品',
          children: [
            {
              id: 21,
              title: '产品1',
              children: []
            }
          ]
        }
      ]
    };
  }
};
</script>
<!-- MenuItem.vue -->
<template>
  <li>
    {{ item.title }}
    <ul v-if="item.children && item.children.length">
      <MenuItem
        v-for="child in item.children"
        :key="child.id"
        :item="child"
      />
    </ul>
  </li>
</template>

<script>
export default {
  name: 'MenuItem',
  props: {
    item: {
      type: Object,
      required: true
    }
  }
};
</script>

以上方法可以根据具体需求选择使用,Element UI 适合快速开发,自定义实现则更加灵活。

标签: vuemenu
分享给朋友:

相关文章

vue实现滑动

vue实现滑动

Vue 实现滑动效果 使用 CSS 过渡和动画 通过 Vue 的 transition 组件结合 CSS 过渡或动画实现滑动效果。适用于简单的元素入场/离场滑动。 <template>…

vue双向实现

vue双向实现

Vue 双向数据绑定的实现原理 Vue 的双向数据绑定主要通过 v-model 指令实现,其核心是结合了数据劫持(Object.defineProperty 或 Proxy)和发布-订阅模式。 数据…

vue实现滚动中断

vue实现滚动中断

Vue 实现滚动中断的方法 在 Vue 中实现滚动中断通常涉及监听滚动事件,并在特定条件下阻止默认行为或停止滚动。以下是几种常见方法: 监听滚动事件并阻止默认行为 通过 @scroll 或 @wh…

vue实现检测数组

vue实现检测数组

Vue 中检测数组变化的方法 Vue 的响应式系统无法直接检测到数组的某些变化,因为 JavaScript 的限制。以下是一些解决方案: 使用 Vue.set 或 this.$set Vue…

vue实现多人视频

vue实现多人视频

实现多人视频通话的Vue方案 使用WebRTC技术结合Vue框架可以构建多人视频通话应用。以下是核心实现方法: 技术栈选择 Vue 2/3作为前端框架 WebRTC用于实时通信 Socket.io…

vue实现tab换行

vue实现tab换行

Vue实现Tab切换的常见方法 使用Vue实现Tab切换功能可以通过多种方式完成,以下是几种常见的方法: 动态组件结合v-if或v-show 通过v-if或v-show控制不同Tab内容的显示与隐…