当前位置:首页 > 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
分享给朋友:

相关文章

antd vue 实现

antd vue 实现

使用 Ant Design Vue 实现功能 Ant Design Vue 是基于 Vue.js 的 UI 组件库,提供了丰富的组件和设计规范。以下是一些常见功能的实现方法。 安装 Ant Desi…

vue实现input

vue实现input

Vue 实现 Input 输入框的方法 基本双向绑定 使用 v-model 指令实现双向数据绑定,适用于大多数表单场景: <template> <input v-model="…

vue实现换肤

vue实现换肤

使用 CSS 变量实现换肤 在 Vue 项目中,可以通过 CSS 变量(Custom Properties)动态切换主题色。CSS 变量可以在运行时修改,适合实现换肤功能。 定义全局 CSS 变量:…

vue实现双向

vue实现双向

Vue 实现双向绑定的方法 Vue 的双向绑定主要通过 v-model 指令实现,它结合了数据绑定和事件监听,适用于表单元素(如 input、select、textarea 等)。以下是几种常见的实现…

vue实现答题

vue实现答题

Vue 实现答题功能 数据结构设计 使用 Vue 的响应式特性管理题目和答案数据。通常需要以下数据结构: data() { return { questions: [ {…

vue实现展开

vue实现展开

展开功能的实现方法 在Vue中实现展开功能可以通过多种方式完成,常见的有使用v-show、v-if指令,结合CSS过渡动画或第三方组件库。 使用v-show控制显示隐藏 通过v-show指令可以简单…