当前位置:首页 > VUE

vue实现左右菜单

2026-02-10 21:14:07VUE

Vue 实现左右菜单

使用 Vue Router 和组件结构

创建一个基本的 Vue 项目结构,包含左右菜单组件和主内容区域。通过 Vue Router 实现路由跳转。

<template>
  <div class="app-container">
    <div class="left-menu">
      <ul>
        <li v-for="item in leftMenuItems" :key="item.path">
          <router-link :to="item.path">{{ item.name }}</router-link>
        </li>
      </ul>
    </div>
    <div class="right-menu">
      <ul>
        <li v-for="item in rightMenuItems" :key="item.path">
          <router-link :to="item.path">{{ item.name }}</router-link>
        </li>
      </ul>
    </div>
    <div class="main-content">
      <router-view></router-view>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      leftMenuItems: [
        { path: '/left1', name: '左侧菜单1' },
        { path: '/left2', name: '左侧菜单2' }
      ],
      rightMenuItems: [
        { path: '/right1', name: '右侧菜单1' },
        { path: '/right2', name: '右侧菜单2' }
      ]
    }
  }
}
</script>

<style>
.app-container {
  display: flex;
  height: 100vh;
}
.left-menu, .right-menu {
  width: 200px;
  background: #f0f0f0;
  padding: 20px;
}
.main-content {
  flex: 1;
  padding: 20px;
}
ul {
  list-style: none;
  padding: 0;
}
li {
  margin-bottom: 10px;
}
</style>

动态菜单与状态管理

对于更复杂的场景,可以使用 Vuex 管理菜单状态,实现动态菜单加载和权限控制。

// store.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    leftMenu: [],
    rightMenu: []
  },
  mutations: {
    SET_MENUS(state, { left, right }) {
      state.leftMenu = left
      state.rightMenu = right
    }
  },
  actions: {
    async fetchMenus({ commit }) {
      // 模拟API调用
      const left = await getLeftMenu()
      const right = await getRightMenu()
      commit('SET_MENUS', { left, right })
    }
  }
})

// 组件中使用
export default {
  computed: {
    leftMenuItems() {
      return this.$store.state.leftMenu
    },
    rightMenuItems() {
      return this.$store.state.rightMenu
    }
  },
  created() {
    this.$store.dispatch('fetchMenus')
  }
}

响应式布局

添加响应式设计,在小屏幕设备上隐藏一侧菜单或改为折叠式菜单。

@media (max-width: 768px) {
  .right-menu {
    display: none;
  }
  .left-menu {
    width: 60px;
    overflow: hidden;
  }
  .left-menu:hover {
    width: 200px;
  }
}

动画过渡效果

为菜单项添加过渡动画,提升用户体验。

<transition-group name="menu-item" tag="ul">
  <li v-for="item in leftMenuItems" :key="item.path">
    <router-link :to="item.path">{{ item.name }}</router-link>
  </li>
</transition-group>

<style>
.menu-item-enter-active, .menu-item-leave-active {
  transition: all 0.5s;
}
.menu-item-enter, .menu-item-leave-to {
  opacity: 0;
  transform: translateX(-30px);
}
</style>

嵌套路由配置

配置嵌套路由以匹配菜单结构,确保路由与菜单项同步。

vue实现左右菜单

const router = new VueRouter({
  routes: [
    {
      path: '/left',
      component: LeftContainer,
      children: [
        { path: 'left1', component: Left1 },
        { path: 'left2', component: Left2 }
      ]
    },
    {
      path: '/right',
      component: RightContainer,
      children: [
        { path: 'right1', component: Right1 },
        { path: 'right2', component: Right2 }
      ]
    }
  ]
})

标签: 菜单vue
分享给朋友:

相关文章

vue实现右下角弹框

vue实现右下角弹框

实现右下角弹框的基本思路 在Vue中实现右下角弹框,通常需要结合CSS定位和Vue的组件化特性。弹框可以通过绝对定位固定在右下角,并通过Vue控制其显示与隐藏。 创建弹框组件 新建一个Vue组件(如…

vue vnode实现

vue vnode实现

Vue VNode 实现原理 VNode(Virtual Node)是 Vue 的核心概念之一,用于描述真实 DOM 的轻量级虚拟表示。VNode 的实现涉及以下关键点: VNode 的基本结构 V…

vue实现博客

vue实现博客

Vue 实现博客的基本步骤 使用 Vue.js 实现一个博客系统可以分为前端和后端两部分。以下是基于 Vue 的前端实现方案,后端可以选择 Node.js、Django 或其他框架。 项目初始化 使…

vue实现计算

vue实现计算

Vue 实现计算的方法 在 Vue 中实现计算功能可以通过多种方式完成,主要包括计算属性(computed)、方法(methods)和侦听器(watch)。以下是具体的实现方法: 计算属性(Comp…

vue 实现树状

vue 实现树状

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

vue实现tabbar

vue实现tabbar

Vue 实现 TabBar 的方法 使用 Vue Router 实现基础 TabBar 安装 Vue Router 依赖: npm install vue-router 创建路由配置文件(route…