当前位置:首页 > 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 中定义菜单数据,并通过方法控制子菜单的展开与折叠。

<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>

<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 组件。

vue 实现侧边栏

<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 实现语音功能的方法 使用 Web Speech API Vue 可以结合 Web Speech API 实现语音识别和合成功能。Web Speech API 包含 SpeechRecognit…

vue 实现grid

vue 实现grid

在Vue中实现Grid布局可以通过多种方式完成,以下是几种常见的方法: 使用CSS Grid布局 CSS Grid是一种强大的布局系统,可以直接在Vue组件的样式中使用。以下是一个简单的示例:…

vue 实现拖拽

vue 实现拖拽

Vue 实现拖拽功能 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以通过 draggable 属性和相关事件实现拖拽功能。 <template> &l…

vue代理实现

vue代理实现

Vue 代理实现方法 在 Vue 项目中,配置代理可以解决开发环境下的跨域问题,通常通过修改 vue.config.js 文件实现。以下是几种常见的代理配置方式: 基础代理配置 在 vue.conf…

vue实现系统

vue实现系统

Vue 实现系统的核心方法 使用 Vue.js 构建系统时,需结合其响应式特性与组件化开发模式。以下为关键实现路径: 项目初始化与工程配置 通过 Vue CLI 或 Vite 创建项目骨架,推荐选择…

vue实现分步

vue实现分步

Vue 实现分步功能 在 Vue 中实现分步功能可以通过多种方式完成,以下是几种常见的方法: 使用动态组件 通过动态组件切换不同的步骤内容,结合 v-if 或 component 标签实现分步逻辑。…