当前位置:首页 > VUE

vue实现左右菜单联动

2026-01-20 03:21:33VUE

实现思路

通过监听左侧菜单的点击事件,动态更新右侧菜单的内容。可以使用Vue的响应式数据绑定和事件机制来实现联动效果。

基础结构设计

在Vue组件中定义两个数据属性分别存储左右菜单的内容:

data() {
  return {
    leftMenus: [
      { id: 1, name: '菜单1' },
      { id: 2, name: '菜单2' }
    ],
    rightMenus: [],
    menuRelations: {
      1: [
        { id: 11, name: '子菜单1-1' },
        { id: 12, name: '子菜单1-2' }
      ],
      2: [
        { id: 21, name: '子菜单2-1' },
        { id: 22, name: '子菜单2-2' }
      ]
    }
  }
}

模板部分

<div class="menu-container">
  <div class="left-menu">
    <ul>
      <li v-for="menu in leftMenus" 
          :key="menu.id"
          @click="selectLeftMenu(menu.id)">
        {{ menu.name }}
      </li>
    </ul>
  </div>

  <div class="right-menu">
    <ul>
      <li v-for="item in rightMenus" 
          :key="item.id">
        {{ item.name }}
      </li>
    </ul>
  </div>
</div>

联动逻辑实现

添加方法处理左侧菜单点击事件:

methods: {
  selectLeftMenu(menuId) {
    this.rightMenus = this.menuRelations[menuId] || []
  }
}

样式处理

添加基础样式确保布局:

.menu-container {
  display: flex;
  height: 100%;
}

.left-menu {
  width: 200px;
  border-right: 1px solid #eee;
}

.right-menu {
  flex: 1;
  padding-left: 20px;
}

ul {
  list-style: none;
  padding: 0;
}

li {
  padding: 8px 12px;
  cursor: pointer;
}

li:hover {
  background-color: #f5f5f5;
}

高级功能扩展

添加当前选中状态的样式反馈:

data() {
  return {
    // 新增当前选中ID
    activeLeftMenuId: null
  }
}

methods: {
  selectLeftMenu(menuId) {
    this.activeLeftMenuId = menuId
    this.rightMenus = this.menuRelations[menuId] || []
  }
}

模板中增加选中状态:

<li v-for="menu in leftMenus"
    :key="menu.id"
    @click="selectLeftMenu(menu.id)"
    :class="{ 'active': activeLeftMenuId === menu.id }">
  {{ menu.name }}
</li>

添加active样式:

.active {
  color: #409eff;
  background-color: #ecf5ff;
}

动态加载优化

对于大数据量场景,可以采用动态加载方式:

async selectLeftMenu(menuId) {
  this.activeLeftMenuId = menuId
  try {
    const res = await api.getRightMenus(menuId)
    this.rightMenus = res.data
  } catch (error) {
    console.error(error)
  }
}

vue实现左右菜单联动

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

相关文章

vue实现打字机

vue实现打字机

Vue实现打字机效果 在Vue中实现打字机效果可以通过动态更新文本内容并添加延迟来实现。以下是几种常见的实现方法: 使用setInterval实现 <template> <d…

vue 实现在线预览

vue 实现在线预览

Vue 实现在线预览的常见方法 使用 iframe 嵌入 通过 iframe 标签可以嵌入多种类型的文件,如 PDF、图片、网页等。需要确保文件地址可访问。 <template> &…

vue实现字母添加排序

vue实现字母添加排序

实现字母添加排序的方法 在Vue中实现字母添加排序功能,可以通过以下步骤完成: 创建Vue实例并定义数据 new Vue({ el: '#app', data: { letters…

vue实现上移下移插件

vue实现上移下移插件

实现上移下移功能的 Vue 插件 在 Vue 中实现列表项的上移和下移功能,可以通过自定义指令或组件封装的方式完成。以下是两种常见实现方式: 基于数组操作的通用方法 通过操作数组索引实现元素位置交换…

vue懒加载实现难吗

vue懒加载实现难吗

vue懒加载的实现难度 Vue懒加载的实现并不复杂,核心逻辑是通过动态导入(Dynamic Imports)和路由配置或组件异步加载完成。以下是具体实现方法: 路由懒加载实现 在Vue Router…

vue实现后退

vue实现后退

Vue 实现后退功能的方法 在 Vue 中实现后退功能通常可以通过以下几种方式完成,具体取决于应用场景和需求。 使用 window.history API 通过原生 JavaScript 的 wi…