当前位置:首页 > VUE

vue实现垂直菜单

2026-02-19 04:02:00VUE

实现垂直菜单的基本结构

在Vue中实现垂直菜单,通常使用<ul><li>标签构建菜单项,结合Vue的v-for指令动态渲染菜单数据。以下是一个基础模板示例:

<template>
  <div class="vertical-menu">
    <ul>
      <li v-for="item in menuItems" :key="item.id">
        <a :href="item.link">{{ item.title }}</a>
      </li>
    </ul>
  </div>
</template>

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

添加样式美化菜单

通过CSS为垂直菜单添加样式,增强视觉效果。以下示例实现简洁的垂直菜单样式:

<style scoped>
.vertical-menu {
  width: 200px;
  background-color: #f8f9fa;
  border-radius: 4px;
  box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}

.vertical-menu ul {
  list-style: none;
  padding: 0;
  margin: 0;
}

.vertical-menu li {
  padding: 10px 15px;
  border-bottom: 1px solid #e1e1e1;
  transition: background-color 0.3s;
}

.vertical-menu li:hover {
  background-color: #e9ecef;
}

.vertical-menu a {
  text-decoration: none;
  color: #333;
  display: block;
}
</style>

实现嵌套子菜单功能

对于需要多级菜单的场景,可以通过递归组件或嵌套数据结构实现。以下是嵌套菜单的实现方式:

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

<script>
export default {
  data() {
    return {
      menuItems: [
        { 
          id: 1, 
          title: '首页', 
          link: '/',
          children: [
            { id: 4, title: '子菜单1', link: '/sub1' },
            { id: 5, title: '子菜单2', link: '/sub2' }
          ]
        },
        { id: 2, title: '产品', link: '/products' },
        { id: 3, title: '关于我们', link: '/about' }
      ]
    }
  }
}
</script>

添加交互效果

通过Vue的v-showv-if指令控制子菜单的显示隐藏,并添加过渡动画:

<template>
  <div class="vertical-menu">
    <ul>
      <li v-for="item in menuItems" :key="item.id" @mouseenter="toggleSubMenu(item.id)">
        <a :href="item.link">{{ item.title }}</a>
        <ul v-show="activeMenu === item.id" class="sub-menu">
          <li v-for="child in item.children" :key="child.id">
            <a :href="child.link">{{ child.title }}</a>
          </li>
        </ul>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      activeMenu: null,
      menuItems: [
        { 
          id: 1, 
          title: '首页', 
          link: '/',
          children: [
            { id: 4, title: '子菜单1', link: '/sub1' },
            { id: 5, title: '子菜单2', link: '/sub2' }
          ]
        }
      ]
    }
  },
  methods: {
    toggleSubMenu(id) {
      this.activeMenu = this.activeMenu === id ? null : id;
    }
  }
}
</script>

<style scoped>
.sub-menu {
  transition: all 0.3s ease;
  overflow: hidden;
}
</style>

使用第三方UI库快速实现

如需快速开发,可以使用Element UI或Ant Design Vue等现成组件库:

vue实现垂直菜单

<template>
  <el-menu
    mode="vertical"
    default-active="1"
    class="el-menu-vertical"
    @open="handleOpen"
    @close="handleClose">
    <el-submenu index="1">
      <template slot="title">
        <i class="el-icon-location"></i>
        <span>导航一</span>
      </template>
      <el-menu-item index="1-1">选项1</el-menu-item>
      <el-menu-item index="1-2">选项2</el-menu-item>
    </el-submenu>
    <el-menu-item index="2">
      <i class="el-icon-menu"></i>
      <span>导航二</span>
    </el-menu-item>
  </el-menu>
</template>

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

export default {
  components: {
    ElMenu,
    ElMenuItem,
    ElSubmenu
  },
  methods: {
    handleOpen(key, keyPath) {
      console.log(key, keyPath);
    },
    handleClose(key, keyPath) {
      console.log(key, keyPath);
    }
  }
}
</script>

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

相关文章

vue设计与实现 书

vue设计与实现 书

vue设计与实现 书 《Vue.js设计与实现》是一本深入探讨Vue.js框架内部原理和设计思想的书籍,适合希望深入理解Vue.js的开发者。以下是关于这本书的详细信息: 书籍内容 《Vue…

vue实现级联

vue实现级联

Vue 实现级联选择器的方法 级联选择器(Cascader)是常见的表单组件,用于处理多层级联动数据选择(如省市区选择)。以下是几种实现方式: 基于 Element UI 的 el-cascader…

vue grid实现

vue grid实现

Vue Grid 实现方法 在 Vue 中实现网格布局可以通过多种方式完成,包括使用原生 CSS Grid、第三方组件库或自定义组件。以下是几种常见方法: 使用原生 CSS Grid 通过 Vue…

vue动画实现

vue动画实现

Vue动画实现方法 Vue提供了多种方式实现动画效果,主要通过内置组件和第三方库完成。 使用<transition>组件 Vue内置的<transition>组件可以为元素添…

vue首页实现

vue首页实现

实现Vue首页的基本步骤 创建一个Vue首页通常涉及项目初始化、页面结构设计、路由配置和组件开发。以下是具体实现方法: 初始化Vue项目 使用Vue CLI或Vite快速搭建项目结构: npm i…

vue实现兼容

vue实现兼容

Vue 兼容性实现方案 Vue.js 的兼容性主要涉及对不同浏览器、Vue 版本以及第三方库的支持。以下是常见的兼容性解决方案: 浏览器兼容性 使用 Babel 转换 ES6+ 代码为 ES5 语…