当前位置:首页 > 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 中实现类似社交平台的 @ 功能,通常涉及输入框的监听、用户匹配和选择插入。以下是具体实现方法: 监听输入框内容 使用 v-model 绑定输入框内容,并通过 @…

vue 实现回复

vue 实现回复

Vue 实现回复功能 在 Vue 中实现回复功能通常涉及表单提交、数据绑定和列表渲染。以下是实现步骤和代码示例: 数据绑定与表单 <template> <div>…

vue实现上传

vue实现上传

Vue 文件上传实现方法 使用 Vue 实现文件上传可以通过原生 HTML5 的 <input type="file"> 元素结合 Vue 的事件处理和数据绑定来实现。 基础实现步骤…

实现vue cli

实现vue cli

安装 Vue CLI 确保系统中已安装 Node.js(版本建议 12.x 或更高)。通过 npm 全局安装 Vue CLI: npm install -g @vue/cli 安装完成后验证版本:…

vue 实现平面

vue 实现平面

Vue 实现平面的方法 在 Vue 中实现平面效果通常涉及 CSS 样式、UI 框架或自定义组件的使用。以下是几种常见方法: 使用 CSS 样式 通过 Vue 的样式绑定或 scoped CSS 为…

vue实现popper

vue实现popper

Vue 实现 Popper 的方法 使用 Tippy.js 库 Tippy.js 是一个轻量级的 Popper.js 封装库,提供丰富的工具提示功能。安装 Tippy.js 及其 Vue 封装: n…