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

联动逻辑实现

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

vue实现左右菜单联动

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;
}

高级功能扩展

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

vue实现左右菜单联动

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 router 实现

vue router 实现

Vue Router 的实现 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是 Vue Router 的核心实现方式。 安装 Vue Router 通过…

vue实现toast

vue实现toast

Vue 实现 Toast 的方法 使用第三方库(推荐) 对于快速实现 Toast 功能,推荐使用成熟的第三方库如 vue-toastification 或 vant 的 Toast 组件。 安装 v…

vue实现datalist

vue实现datalist

使用 Vue 实现 HTML5 的 datalist 功能 HTML5 的 <datalist> 元素提供了一种自动完成输入框的功能,允许用户在输入时从预定义的选项列表中选择。以下是几种在…

vue实现画廊

vue实现画廊

Vue实现画廊的基本方法 使用Vue.js实现画廊功能可以通过多种方式完成,以下是一种常见的实现方案: 安装必要依赖 npm install vue-gallery --save 引入组件并注册…

vue实现列表

vue实现列表

Vue 实现列表的方法 在 Vue 中实现列表渲染通常使用 v-for 指令,可以动态生成多个元素。以下是几种常见的实现方式: 基础列表渲染 使用 v-for 遍历数组,生成列表项。v-for 需要…

vue怎么实现 tab

vue怎么实现 tab

Vue 实现 Tab 的方法 使用动态组件和 v-if 通过动态组件或 v-if 指令切换不同 Tab 内容,结合点击事件改变当前激活的 Tab。 <template> &l…