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

vue实现录播播放

Vue 实现录播播放 使用 video.js 实现 安装 video.js 和相关的 Vue 适配器: npm install video.js @videojs-player/vue 在 Vue…

实现vue

实现vue

安装Vue.js 通过npm安装Vue.js是最常见的方式。确保已安装Node.js和npm,运行以下命令: npm install vue 或者使用CDN直接引入: <script src…

vue实现换行

vue实现换行

Vue 中实现换行的几种方法 在 Vue 中实现换行可以通过多种方式,具体取决于使用场景和需求。以下是常见的几种方法: 使用 HTML 的 <br> 标签 在模板中直接使用 <br…

vue实现弹幕

vue实现弹幕

Vue 实现弹幕功能 弹幕功能通常包括动态生成、滚动显示、颜色和速度随机化等特性。以下是基于 Vue 3 的实现方法。 核心思路 使用 CSS 动画控制弹幕从右向左滚动。 动态生成弹幕数据,随机设置…

vue实现注册

vue实现注册

Vue 实现注册功能 注册功能通常涉及前端表单、数据验证、与后端 API 的交互等步骤。以下是一个完整的 Vue 实现注册功能的方案。 创建注册表单 使用 Vue 的模板语法创建注册表单,包含用户名…

vue底部实现

vue底部实现

Vue 底部实现方法 在 Vue 项目中实现底部布局可以通过多种方式完成,以下是一些常见的方法: 使用固定定位 将底部元素固定在页面底部,适用于单页应用或需要始终显示的底部栏。 <temp…