当前位置:首页 > VUE

vue实现左右菜单

2026-03-28 07:15:59VUE

实现左右菜单的Vue方案

使用Vue Router与嵌套路由

router/index.js中配置嵌套路由结构,主布局包含左右两个区域:

{
  path: '/',
  component: MainLayout,
  children: [
    {
      path: '',
      components: {
        left: LeftMenu,
        right: ContentArea
      }
    }
  ]
}

主布局组件使用命名视图:

<div class="main-layout">
  <div class="left-menu">
    <router-view name="left"></router-view>
  </div>
  <div class="right-content">
    <router-view name="right"></router-view>
  </div>
</div>

基于组件通信的实现

创建父组件管理状态:

export default {
  data() {
    return {
      activeMenu: 'home'
    }
  }
}

左侧菜单组件发射事件:

vue实现左右菜单

<ul class="menu-list">
  <li @click="$emit('menu-change', 'home')">首页</li>
  <li @click="$emit('menu-change', 'products')">产品</li>
</ul>

右侧内容组件接收prop:

props: ['currentMenu'],
watch: {
  currentMenu(newVal) {
    this.loadContent(newVal)
  }
}

使用Vuex状态管理

store模块定义:

vue实现左右菜单

const store = new Vuex.Store({
  state: {
    activeMenu: null
  },
  mutations: {
    SET_MENU(state, menu) {
      state.activeMenu = menu
    }
  }
})

菜单组件提交变更:

methods: {
  selectMenu(menu) {
    this.$store.commit('SET_MENU', menu)
  }
}

响应式布局样式

基础CSS结构:

.main-layout {
  display: flex;
  height: 100vh;
}
.left-menu {
  width: 250px;
  background: #f5f5f5;
  transition: all 0.3s;
}
.right-content {
  flex: 1;
  overflow: auto;
}

@media (max-width: 768px) {
  .left-menu {
    width: 60px;
  }
}

动态菜单实现示例

递归组件实现多级菜单:

Vue.component('menu-item', {
  template: `
    <li>
      <div @click="toggle">
        {{ item.name }}
      </div>
      <ul v-show="isOpen" v-if="item.children">
        <menu-item 
          v-for="child in item.children"
          :item="child"
          :key="child.path"
        ></menu-item>
      </ul>
    </li>
  `,
  props: ['item'],
  data() {
    return {
      isOpen: false
    }
  },
  methods: {
    toggle() {
      this.isOpen = !this.isOpen
    }
  }
})

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

相关文章

vue实现飘窗原理

vue实现飘窗原理

vue实现飘窗原理 飘窗效果通常指在页面上悬浮显示的弹窗或通知,跟随页面滚动或固定在某个位置。Vue实现这一效果主要依赖组件化开发、CSS定位和动态数据绑定。 组件结构设计 创建一个独立的Vue组件…

vue实现递归

vue实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据(如菜单、评论列表、文件目录等)。以下是具体实现方法: 定义递归组件 通过 name 选项让组件可以递归调用自身:…

vue实现drag

vue实现drag

Vue 实现拖拽功能的方法 在 Vue 中实现拖拽功能可以通过原生 HTML5 的拖拽 API 或第三方库如 vuedraggable 来完成。以下是两种常见方法的实现方式。 使用 HTML5 拖拽…

vue实现erp

vue实现erp

Vue实现ERP系统的关键步骤 技术选型与架构设计 采用Vue 3 + TypeScript构建前端,搭配Pinia状态管理,Element Plus或Ant Design Vue作为UI框架。后端可…

vue监听实现

vue监听实现

Vue 监听实现方法 在 Vue 中可以通过多种方式实现监听数据变化或事件触发,以下是常见的几种方法: 使用 watch 选项 watch 是 Vue 提供的核心功能之一,用于观察和响应 Vue 实…

轮播vue实现

轮播vue实现

使用 Vue 实现轮播功能 基础轮播实现 安装依赖(如使用 Swiper): npm install swiper vue-awesome-swiper 组件代码示例: <templ…