当前位置:首页 > VUE

vue 实现侧边栏

2026-02-19 19:17:39VUE

实现侧边栏的基本结构

使用 Vue 的模板语法定义侧边栏的基础结构。侧边栏通常包含导航菜单和可折叠的子菜单。

<template>
  <div class="sidebar">
    <div class="sidebar-header">侧边栏标题</div>
    <ul class="sidebar-menu">
      <li v-for="item in menuItems" :key="item.id">
        <a href="#" @click="toggleSubMenu(item)">
          {{ item.title }}
          <span v-if="item.children">{{ item.expanded ? '−' : '+' }}</span>
        </a>
        <ul v-if="item.children && item.expanded">
          <li v-for="child in item.children" :key="child.id">
            <a href="#">{{ child.title }}</a>
          </li>
        </ul>
      </li>
    </ul>
  </div>
</template>

定义菜单数据与状态管理

在 Vue 的 datasetup 中定义菜单数据,并通过方法控制子菜单的展开与折叠。

vue 实现侧边栏

<script>
export default {
  data() {
    return {
      menuItems: [
        {
          id: 1,
          title: '首页',
          expanded: false,
          children: null
        },
        {
          id: 2,
          title: '产品',
          expanded: false,
          children: [
            { id: 21, title: '产品列表' },
            { id: 22, title: '产品详情' }
          ]
        }
      ]
    }
  },
  methods: {
    toggleSubMenu(item) {
      if (item.children) {
        item.expanded = !item.expanded;
      }
    }
  }
}
</script>

添加样式增强交互

使用 CSS 为侧边栏添加基础样式,包括背景色、悬停效果和子菜单缩进。

<style scoped>
.sidebar {
  width: 250px;
  background-color: #2c3e50;
  color: white;
  height: 100vh;
  padding: 20px 0;
}

.sidebar-header {
  padding: 10px 20px;
  font-size: 1.2em;
  border-bottom: 1px solid #34495e;
}

.sidebar-menu li {
  list-style: none;
}

.sidebar-menu a {
  display: block;
  padding: 10px 20px;
  color: white;
  text-decoration: none;
}

.sidebar-menu a:hover {
  background-color: #34495e;
}

.sidebar-menu ul ul {
  padding-left: 20px;
  background-color: #1a252f;
}
</style>

结合 Vue Router 实现路由跳转

如果侧边栏需要跳转页面,可以集成 Vue Router,将 <a> 替换为 <router-link>

vue 实现侧边栏

<li v-for="item in menuItems" :key="item.id">
  <router-link v-if="!item.children" :to="item.path">
    {{ item.title }}
  </router-link>
  <template v-else>
    <a @click="toggleSubMenu(item)">
      {{ item.title }}
      <span>{{ item.expanded ? '−' : '+' }}</span>
    </a>
    <ul v-if="item.expanded">
      <li v-for="child in item.children" :key="child.id">
        <router-link :to="child.path">{{ child.title }}</router-link>
      </li>
    </ul>
  </template>
</li>

响应式侧边栏(可选)

通过 Vue 的响应式数据和媒体查询实现侧边栏的折叠与展开功能,适合移动端适配。

data() {
  return {
    isCollapsed: false
  }
}
@media (max-width: 768px) {
  .sidebar {
    width: 60px;
    overflow: hidden;
  }
  .sidebar-header, .sidebar-menu a span {
    display: none;
  }
}

使用第三方库(如 Element UI)

如果需要快速实现,可以借助 UI 库如 Element UI 的 el-menu 组件。

<template>
  <el-menu
    default-active="1"
    class="sidebar"
    background-color="#2c3e50"
    text-color="#fff"
    active-text-color="#ffd04b">
    <el-submenu index="1">
      <template #title>
        <span>产品</span>
      </template>
      <el-menu-item index="1-1">产品列表</el-menu-item>
      <el-menu-item index="1-2">产品详情</el-menu-item>
    </el-submenu>
  </el-menu>
</template>

标签: 侧边vue
分享给朋友:

相关文章

vue中登陆实现逻辑

vue中登陆实现逻辑

Vue 中登录实现逻辑 前端实现逻辑 表单验证 使用 Vue 的表单验证库(如 VeeValidate)或自定义验证规则,确保用户输入的账号和密码符合要求。例如,检查邮箱格式、密码长度等。 发送登…

vue实现键盘

vue实现键盘

Vue 实现键盘功能 在Vue中实现键盘功能通常涉及监听键盘事件、处理输入以及渲染虚拟键盘界面。以下是几种常见的实现方式: 监听键盘事件 通过@keydown或@keyup指令监听键盘事件,适用于需…

vue实现全屏

vue实现全屏

Vue 实现全屏功能的方法 在 Vue 中实现全屏功能可以通过浏览器提供的 Fullscreen API 来实现。以下是几种常见的实现方式: 使用原生 Fullscreen API 通过调用 doc…

vue 实现拖动

vue 实现拖动

Vue 实现拖动的几种方法 在Vue中实现拖动功能可以通过多种方式,包括原生HTML5的拖放API、第三方库如vuedraggable等。以下是几种常见的实现方法: 使用HTML5拖放API HT…

vue diff实现

vue diff实现

Vue Diff 算法实现原理 Vue 的虚拟 DOM Diff 算法(即 patch 过程)是其高效渲染的核心,主要通过对比新旧虚拟节点的差异,最小化 DOM 操作。以下是关键实现要点: 同层级…

vue 实现全屏

vue 实现全屏

Vue 实现全屏功能 在 Vue 中实现全屏功能可以通过浏览器提供的 Fullscreen API 完成。以下是一个完整的实现方案: 安装依赖(可选) 如果需要跨浏览器兼容性更好,可以安装 scr…