当前位置:首页 > VUE

vue实现左侧导航

2026-02-17 23:19:01VUE

Vue 实现左侧导航

使用 Element UI 的 Menu 组件

Element UI 提供了 el-menu 组件,可以快速实现左侧导航。以下是一个基本示例:

<template>
  <el-menu
    default-active="1"
    class="el-menu-vertical"
    background-color="#545c64"
    text-color="#fff"
    active-text-color="#ffd04b">
    <el-submenu index="1">
      <template #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>
export default {
  name: 'SideNav'
}
</script>

<style>
.el-menu-vertical {
  height: 100vh;
}
</style>

使用 Vue Router 实现导航跳转

结合 Vue Router,可以为导航菜单添加路由功能:

<template>
  <el-menu
    :router="true"
    default-active="/"
    class="el-menu-vertical"
    background-color="#545c64"
    text-color="#fff"
    active-text-color="#ffd04b">
    <el-menu-item index="/">
      <i class="el-icon-house"></i>
      <span>首页</span>
    </el-menu-item>
    <el-menu-item index="/about">
      <i class="el-icon-document"></i>
      <span>关于</span>
    </el-menu-item>
  </el-menu>
</template>

自定义导航组件

如果需要完全自定义导航,可以使用 Vue 的动态组件和样式:

<template>
  <div class="sidebar">
    <div 
      v-for="item in navItems" 
      :key="item.path"
      class="nav-item"
      :class="{ 'active': currentPath === item.path }"
      @click="navigateTo(item.path)">
      <i :class="item.icon"></i>
      <span>{{ item.title }}</span>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentPath: '/',
      navItems: [
        { path: '/', title: '首页', icon: 'icon-home' },
        { path: '/about', title: '关于', icon: 'icon-info' }
      ]
    }
  },
  methods: {
    navigateTo(path) {
      this.currentPath = path
      this.$router.push(path)
    }
  }
}
</script>

<style>
.sidebar {
  width: 200px;
  height: 100vh;
  background: #2c3e50;
  color: white;
}
.nav-item {
  padding: 12px 20px;
  cursor: pointer;
}
.nav-item:hover {
  background: #34495e;
}
.active {
  background: #34495e;
  border-left: 4px solid #42b983;
}
</style>

响应式导航

添加响应式功能,在小屏幕下隐藏导航或显示汉堡菜单:

<template>
  <div>
    <button @click="toggleSidebar" class="hamburger">
      ☰
    </button>
    <div class="sidebar" :class="{ 'collapsed': isCollapsed }">
      <!-- 导航内容 -->
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isCollapsed: false
    }
  },
  methods: {
    toggleSidebar() {
      this.isCollapsed = !this.isCollapsed
    }
  }
}
</script>

<style>
.hamburger {
  display: none;
}
@media (max-width: 768px) {
  .hamburger {
    display: block;
  }
  .sidebar {
    position: fixed;
    left: 0;
    top: 0;
    z-index: 100;
    transform: translateX(-100%);
    transition: transform 0.3s ease;
  }
  .sidebar.collapsed {
    transform: translateX(0);
  }
}
</style>

嵌套路由导航

对于多级导航,可以使用嵌套路由和递归组件:

<template>
  <div>
    <div v-for="item in navItems" :key="item.path">
      <div @click="toggleExpand(item)">
        {{ item.title }}
        <span v-if="item.children">{{ isExpanded(item) ? '−' : '+' }}</span>
      </div>
      <div v-if="item.children && isExpanded(item)" class="submenu">
        <NavItem :items="item.children" />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: 'NavItem',
  props: ['items'],
  data() {
    return {
      expandedItems: []
    }
  },
  methods: {
    isExpanded(item) {
      return this.expandedItems.includes(item.path)
    },
    toggleExpand(item) {
      if (item.children) {
        const index = this.expandedItems.indexOf(item.path)
        if (index > -1) {
          this.expandedItems.splice(index, 1)
        } else {
          this.expandedItems.push(item.path)
        }
      } else {
        this.$router.push(item.path)
      }
    }
  }
}
</script>

vue实现左侧导航

标签: vue
分享给朋友:

相关文章

vue请求实现进度条

vue请求实现进度条

实现请求进度条的方法 在Vue中实现请求进度条可以通过多种方式完成,常见的有使用第三方库如axios结合nprogress或自定义进度条组件。以下是几种实现方法: 使用axios和nprogres…

vue权限实现

vue权限实现

Vue 权限实现方案 基于路由的权限控制 通过路由守卫实现权限验证,在路由配置中添加meta字段标记权限要求。在router.beforeEach中检查用户权限与路由要求的匹配情况。 // rou…

实现 vue 框架

实现 vue 框架

Vue 框架的基本实现 Vue 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是实现 Vue 框架的基本步骤和核心概念。 核心概念 响应式数据绑定 Vue 的核心特性之一是响应式…

vue实现list

vue实现list

Vue 实现列表渲染 在 Vue 中,可以使用 v-for 指令来渲染列表。v-for 指令基于一个数组或对象来渲染一个列表,可以遍历数组或对象的属性。 基本列表渲染 <template>…

vue实现gps

vue实现gps

Vue 中实现 GPS 定位功能 在 Vue 中实现 GPS 定位功能通常依赖于浏览器的 Geolocation API 或第三方地图服务(如高德、百度地图等)。以下是两种常见的实现方式: 使用浏…

vue 绑定实现

vue 绑定实现

Vue 绑定实现 Vue 提供了多种数据绑定的方式,包括文本插值、属性绑定、事件绑定、双向绑定等。以下是常见的绑定实现方法: 文本插值 使用双大括号 {{ }} 进行文本插值,将数据动态渲染到 DO…