当前位置:首页 > VUE

vue实现左边导航

2026-02-20 12:21:07VUE

实现左侧导航的基本结构

在Vue项目中实现左侧导航,通常需要结合路由配置和组件化开发。使用<router-link>或编程式导航实现页面跳转,搭配CSS样式完成布局。

<template>
  <div class="left-nav">
    <div class="nav-header">导航标题</div>
    <ul class="nav-list">
      <li v-for="item in navItems" :key="item.path">
        <router-link :to="item.path">{{ item.title }}</router-link>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      navItems: [
        { path: '/home', title: '首页' },
        { path: '/about', title: '关于' },
        { path: '/contact', title: '联系' }
      ]
    }
  }
}
</script>

样式设计与布局

通过CSS实现固定定位和垂直布局,常用Flexbox或Grid布局系统。建议使用SCSS/Less增强可维护性。

vue实现左边导航

<style scoped>
.left-nav {
  width: 200px;
  height: 100vh;
  position: fixed;
  left: 0;
  top: 0;
  background: #304156;
  color: white;
}

.nav-header {
  padding: 20px;
  font-size: 18px;
  border-bottom: 1px solid rgba(255,255,255,0.1);
}

.nav-list a {
  display: block;
  padding: 12px 20px;
  color: rgba(255,255,255,0.7);
  transition: all 0.3s;
}

.nav-list a:hover {
  color: white;
  background: rgba(0,0,0,0.2);
}

.router-link-active {
  color: white !important;
  background: rgba(0,0,0,0.3);
}
</style>

动态路由与权限控制

对于需要权限控制的导航菜单,可通过v-if或计算属性过滤显示项。结合Vuex或Pinia管理用户权限状态。

computed: {
  filteredNavItems() {
    return this.navItems.filter(item => {
      return this.$store.state.user.roles.includes(item.requiredRole)
    })
  }
}

嵌套子菜单实现

多级导航菜单可通过递归组件实现。添加hasChildren字段判断是否需要展开子菜单。

vue实现左边导航

<template>
  <li v-for="item in navItems" :key="item.path">
    <template v-if="!item.children">
      <router-link :to="item.path">{{ item.title }}</router-link>
    </template>
    <template v-else>
      <div @click="toggleSubMenu(item)" class="menu-title">
        {{ item.title }}
        <span class="arrow" :class="{ 'rotate': item.expanded }"></span>
      </div>
      <ul v-show="item.expanded">
        <nav-item :navItems="item.children"></nav-item>
      </ul>
    </template>
  </li>
</template>

响应式处理

通过媒体查询实现移动端适配,添加展开/收起功能按钮。

@media (max-width: 768px) {
  .left-nav {
    transform: translateX(-100%);
    transition: transform 0.3s;
  }
  .left-nav.active {
    transform: translateX(0);
  }
}

状态持久化

使用localStoragesessionStorage保存菜单展开状态,提升用户体验。

methods: {
  toggleSubMenu(item) {
    this.$set(item, 'expanded', !item.expanded)
    localStorage.setItem(`menu_${item.path}`, item.expanded)
  }
}

标签: vue
分享给朋友:

相关文章

vue实现图片轮播

vue实现图片轮播

使用 Swiper 实现图片轮播 安装 Swiper 依赖 npm install swiper 在 Vue 组件中引入 Swiper <template> <div…

vue实现视频会议

vue实现视频会议

使用 Vue 实现视频会议 技术选型 Vue.js 作为前端框架,结合 WebRTC 技术实现实时音视频通信。常用的库包括: peerjs:简化 WebRTC 的点对点连接。 socket.io:用…

vue实现贴图

vue实现贴图

Vue 实现贴图功能 在Vue中实现贴图功能通常涉及将图片动态添加到指定位置或元素上。以下是几种常见实现方式: 使用v-bind动态绑定图片 通过数据驱动的方式动态更换图片源: <templ…

vue实现selectable

vue实现selectable

Vue 实现可选择的 Select 组件 在 Vue 中实现一个可选择的 Select 组件,可以通过以下几种方式: 使用原生 HTML select 元素 <template>…

vue实现布局

vue实现布局

Vue 实现布局方法 Vue 提供了多种方式实现页面布局,可以通过组件化、CSS 框架或自定义样式完成。以下是几种常见方法: 使用 CSS Flexbox 或 Grid 通过 Vue 单文件组件结合…

vue jwt实现

vue jwt实现

Vue JWT 实现方法 安装依赖 确保项目中安装了 jsonwebtoken(后端)和 axios(前端)。若使用 Vue 3,可搭配 vue-router 和 pinia(或 vuex)管理状态。…