当前位置:首页 > VUE

vue实现侧边栏菜单

2026-02-21 14:56:39VUE

Vue 实现侧边栏菜单的方法

使用 Vue Router 和动态路由

在 Vue 项目中,可以通过 Vue Router 结合动态路由实现侧边栏菜单。定义一个菜单数据数组,通过 v-for 循环渲染菜单项,并根据路由跳转。

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

<script>
export default {
  data() {
    return {
      menuItems: [
        { title: '首页', path: '/' },
        { title: '用户管理', path: '/users' },
        { title: '设置', path: '/settings' }
      ]
    }
  }
}
</script>

<style>
.sidebar {
  width: 200px;
  background-color: #f5f5f5;
  height: 100vh;
}
.menu-item {
  padding: 10px;
  border-bottom: 1px solid #ddd;
}
</style>

使用 Element UI 的 Menu 组件

如果项目中使用了 Element UI,可以直接使用其提供的 el-menu 组件快速实现侧边栏菜单。

<template>
  <el-menu
    :default-active="activeMenu"
    class="el-menu-vertical"
    background-color="#545c64"
    text-color="#fff"
    active-text-color="#ffd04b">
    <el-menu-item index="1" @click="$router.push('/')">
      <i class="el-icon-menu"></i>
      <span>首页</span>
    </el-menu-item>
    <el-submenu index="2">
      <template #title>
        <i class="el-icon-user"></i>
        <span>用户管理</span>
      </template>
      <el-menu-item index="2-1" @click="$router.push('/users')">用户列表</el-menu-item>
    </el-submenu>
  </el-menu>
</template>

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

使用递归组件实现多级菜单

对于嵌套层级较深的菜单,可以使用递归组件动态渲染。

vue实现侧边栏菜单

<template>
  <div class="sidebar">
    <menu-item
      v-for="item in menuData"
      :key="item.path"
      :item="item"
    />
  </div>
</template>

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

export default {
  components: { MenuItem },
  data() {
    return {
      menuData: [
        {
          title: '首页',
          path: '/',
          children: []
        },
        {
          title: '系统管理',
          path: '/system',
          children: [
            { title: '用户管理', path: '/system/users' },
            { title: '角色管理', path: '/system/roles' }
          ]
        }
      ]
    }
  }
}
</script>

MenuItem.vue 中:

<template>
  <div>
    <router-link v-if="!item.children.length" :to="item.path">
      {{ item.title }}
    </router-link>
    <div v-else>
      <div>{{ item.title }}</div>
      <menu-item
        v-for="child in item.children"
        :key="child.path"
        :item="child"
      />
    </div>
  </div>
</template>

<script>
export default {
  name: 'MenuItem',
  props: ['item']
}
</script>

结合 Vuex 管理菜单状态

如果需要跨组件共享菜单状态(如折叠/展开),可以使用 Vuex 存储菜单的展开状态。

vue实现侧边栏菜单

// store.js
export default new Vuex.Store({
  state: {
    isCollapse: false
  },
  mutations: {
    toggleMenu(state) {
      state.isCollapse = !state.isCollapse
    }
  }
})

在组件中调用:

<el-menu :collapse="isCollapse">
  <!-- 菜单项 -->
</el-menu>
<button @click="$store.commit('toggleMenu')">切换菜单</button>

<script>
import { mapState } from 'vuex'

export default {
  computed: {
    ...mapState(['isCollapse'])
  }
}
</script>

响应式侧边栏

通过 CSS 媒体查询或监听窗口大小实现侧边栏的响应式折叠。

@media (max-width: 768px) {
  .sidebar {
    width: 60px;
    overflow: hidden;
  }
}

或者在 Vue 中动态计算:

mounted() {
  window.addEventListener('resize', this.handleResize)
  this.handleResize()
},
methods: {
  handleResize() {
    this.isCollapse = window.innerWidth < 768
  }
}

以上方法可以根据项目需求灵活组合使用,实现功能完善且美观的侧边栏菜单。

标签: 侧边菜单
分享给朋友:

相关文章

css制作下拉菜单

css制作下拉菜单

CSS 制作下拉菜单的方法 使用纯 CSS 可以创建简单的下拉菜单效果,主要依赖 :hover 伪类和 display 属性控制子菜单的显示与隐藏。 基础 HTML 结构 <div c…

jquery菜单

jquery菜单

以下是关于使用jQuery创建交互式菜单的几种常见方法及实现示例: 基础下拉菜单实现 通过jQuery的slideToggle和toggleClass实现简单下拉效果: $('.menu-item…

css div 制作导航菜单

css div 制作导航菜单

使用 CSS 和 Div 制作导航菜单 导航菜单是网站的重要组成部分,以下是通过 CSS 和 div 元素制作导航菜单的方法。 基本 HTML 结构 创建一个简单的 div 结构作为导航菜单的基础:…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li>&l…

vue实现菜单联动

vue实现菜单联动

实现菜单联动的基本思路 在Vue中实现菜单联动通常涉及父子组件通信或状态管理。核心是通过数据绑定和事件监听,确保一个菜单的选择能触发另一个菜单的更新。 数据准备与结构设计 定义菜单数据时,建议使用…

vue实现横排菜单

vue实现横排菜单

实现横排菜单的方法 在Vue中实现横排菜单可以通过多种方式完成,以下是几种常见的实现方法。 使用Flex布局实现横排菜单 通过CSS Flex布局可以轻松实现横排菜单,代码简洁且兼容性好。…