当前位置:首页 > 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增强可维护性。

<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字段判断是否需要展开子菜单。

<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保存菜单展开状态,提升用户体验。

vue实现左边导航

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

标签: vue
分享给朋友:

相关文章

vue聊天实现

vue聊天实现

Vue 聊天应用实现步骤 创建 Vue 项目 使用 Vue CLI 或 Vite 初始化项目,安装必要依赖(如 Vue 3、Element UI 或 Vuetify 用于 UI 组件)。 npm c…

vue实现动态

vue实现动态

Vue 实现动态路由的方法 在 Vue 中实现动态路由通常涉及以下几个关键步骤: 使用 Vue Router 的动态路由匹配 通过 Vue Router 的 :param 语法可以实现动态路由匹配。…

vue实现导出

vue实现导出

Vue 实现导出功能的方法 在 Vue 项目中实现导出功能通常涉及将数据导出为 Excel、CSV 或其他格式。以下是几种常见的实现方式: 使用 xlsx 库导出 Excel 安装 xlsx 库:…

vue 实现树状

vue 实现树状

Vue 实现树状结构的方法 递归组件实现树状结构 递归组件是 Vue 中实现树状结构的常见方法。通过组件自身调用自身,可以轻松构建多层级树状结构。 <template> <ul…

vue 实现流程

vue 实现流程

Vue 实现流程 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是 Vue 实现的基本流程: 安装 Vue.js 通过 CDN 引入或使用 npm/yarn 安装:…

vue实现伸缩

vue实现伸缩

Vue实现伸缩功能的方法 使用CSS过渡和Vue的v-if或v-show 通过CSS的transition属性结合Vue的条件渲染指令(v-if或v-show)可以实现元素的伸缩效果。定义一个CSS类…