当前位置:首页 > VUE

vue实现menu

2026-01-07 23:17:09VUE

Vue 实现 Menu 的方法

使用 Element UI 的 Menu 组件

Element UI 提供了现成的 Menu 组件,适合快速实现导航菜单。安装 Element UI 后,可以直接使用 el-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 的动态组件和递归组件实现。

<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 适合快速开发,自定义实现则更加灵活。

vue实现menu

标签: vuemenu
分享给朋友:

相关文章

vue实现微博发布动态

vue实现微博发布动态

使用Vue实现微博发布动态功能 创建Vue组件结构 新建一个WeiboPost.vue组件,包含文本框、图片上传和发布按钮: <template> <div class="w…

vue 实现

vue 实现

Vue 实现的基本步骤 安装 Vue.js 可以通过 npm 或 CDN 引入。使用 npm 安装适合大型项目,CDN 适合快速原型开发。 npm install vue 在 HTML 文件中引入…

vue alert实现

vue alert实现

使用 Vue 实现 Alert 组件 在 Vue 中实现 Alert 组件可以通过自定义组件或结合第三方库完成。以下是几种常见方法: 自定义 Alert 组件 创建一个可复用的 Alert 组件,…

vue实现toggle

vue实现toggle

Vue 实现 Toggle 功能 在 Vue 中实现 toggle(切换)功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 和 v-on 通过 v-model 绑定数据,结合…

vue  实现tab

vue 实现tab

实现 Tab 切换功能 在 Vue 中实现 Tab 切换功能可以通过动态组件或条件渲染完成。以下是两种常见方法: 使用 v-if 或 v-show 实现条件渲染 通过绑定 currentTab 变量…

vue实现toast

vue实现toast

Vue 实现 Toast 的方法 使用第三方库(推荐) 对于快速实现 Toast 功能,推荐使用成熟的第三方库如 vue-toastification 或 vant 的 Toast 组件。 安装 v…