当前位置:首页 > 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 实现fadeout

vue 实现fadeout

Vue 实现淡出效果 在 Vue 中实现淡出(fade-out)效果可以通过 CSS 过渡或动画结合 Vue 的动态渲染功能完成。以下是几种常见方法: 使用 Vue 过渡(Transition)组件…

vue实现treeselect

vue实现treeselect

Vue TreeSelect 实现方法 使用 Vue 实现 TreeSelect 组件可以通过以下几种方式完成,包括使用现成的第三方库或自行封装组件。 使用第三方库 推荐使用成熟的第三方 TreeS…

vue实现api

vue实现api

Vue 实现 API 调用 在 Vue 中调用 API 通常涉及使用 axios 或 fetch 发送 HTTP 请求,并结合 Vue 的响应式特性管理数据。以下是常见的实现方式: 安装 axios…

vue实现表单

vue实现表单

Vue 表单实现方法 双向数据绑定 使用 v-model 指令实现表单元素与数据的双向绑定。适用于 input、textarea、select 等元素。 <template> <…

vue实现 treegrid

vue实现 treegrid

Vue 实现 TreeGrid 的方法 使用现成组件库 Element UI、Ant Design Vue 等流行组件库提供了现成的 TreeTable/TreeGrid 组件,可直接使用。 Ele…

vue实现微云

vue实现微云

Vue 实现微云功能 使用 Vue 实现类似微云的网盘功能需要结合前端框架、后端存储及文件处理技术。以下是关键实现步骤和代码示例: 前端框架搭建 使用 Vue CLI 创建项目基础结构,安装必要依赖…