当前位置:首页 > VUE

vue实现左右菜单联动实现

2026-03-07 19:23:25VUE

实现思路

Vue实现左右菜单联动通常需要两个组件:左侧的导航菜单和右侧的内容区域。通过监听左侧菜单的点击事件,动态更新右侧内容。核心在于数据绑定和事件传递。

基础代码结构

使用Vue的单文件组件(SFC)结构,分为左菜单和右内容两个组件。

<template>
  <div class="container">
    <LeftMenu :items="menuItems" @select="handleMenuSelect" />
    <RightContent :activeItem="activeItem" />
  </div>
</template>

<script>
import LeftMenu from './LeftMenu.vue'
import RightContent from './RightContent.vue'

export default {
  components: { LeftMenu, RightContent },
  data() {
    return {
      menuItems: [
        { id: 1, title: '菜单1' },
        { id: 2, title: '菜单2' }
      ],
      activeItem: null
    }
  },
  methods: {
    handleMenuSelect(item) {
      this.activeItem = item
    }
  }
}
</script>

左侧菜单组件

左侧菜单组件负责渲染菜单项并触发选择事件。

<template>
  <div class="left-menu">
    <div 
      v-for="item in items" 
      :key="item.id"
      @click="$emit('select', item)"
      :class="{ 'active': item.id === activeId }"
    >
      {{ item.title }}
    </div>
  </div>
</template>

<script>
export default {
  props: ['items'],
  emits: ['select']
}
</script>

右侧内容组件

右侧内容组件根据当前选中的菜单项显示对应内容。

<template>
  <div class="right-content">
    <div v-if="activeItem">
      <h3>{{ activeItem.title }}</h3>
      <p>这里是 {{ activeItem.title }} 的内容</p>
    </div>
  </div>
</template>

<script>
export default {
  props: ['activeItem']
}
</script>

样式优化

为左右布局添加基础样式,确保视觉上的联动效果。

.container {
  display: flex;
  height: 100vh;
}

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

.left-menu div {
  padding: 10px;
  cursor: pointer;
}

.left-menu div.active {
  background: #f0f0f0;
}

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

动态内容加载

如需根据菜单项加载异步内容,可在右侧组件中使用watch监听activeItem变化。

<script>
export default {
  props: ['activeItem'],
  data() {
    return {
      content: null
    }
  },
  watch: {
    activeItem: {
      immediate: true,
      handler(newVal) {
        if (newVal) {
          this.loadContent(newVal.id)
        }
      }
    }
  },
  methods: {
    async loadContent(id) {
      const res = await fetch(`/api/content/${id}`)
      this.content = await res.json()
    }
  }
}
</script>

路由集成

若项目使用Vue Router,可将菜单联动与路由结合,通过router-link实现导航。

vue实现左右菜单联动实现

<template>
  <div class="left-menu">
    <router-link
      v-for="item in items"
      :key="item.id"
      :to="item.path"
      active-class="active"
    >
      {{ item.title }}
    </router-link>
  </div>
</template>

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

相关文章

vue请求实现进度条

vue请求实现进度条

实现请求进度条的方法 在Vue中实现请求进度条可以通过多种方式完成,常见的有使用第三方库如axios结合nprogress或自定义进度条组件。以下是几种实现方法: 使用axios和nprogress…

vue组件实现

vue组件实现

Vue 组件实现基础 Vue 组件是 Vue.js 的核心特性之一,允许将 UI 拆分为独立、可复用的模块。组件的实现包括定义、注册、数据传递和生命周期管理等。 定义组件 组件可以通过单文件组件(.…

vue实现跑车

vue实现跑车

Vue 实现跑车动画效果 使用 Vue 结合 CSS 动画可以实现跑车在屏幕上移动的效果。以下是一个完整的实现方案: 创建 Vue 组件结构 <template> <div c…

vue实现slider

vue实现slider

Vue 实现 Slider 组件 使用 Vue 实现 Slider 组件可以通过原生开发或借助第三方库。以下是两种常见方法: 原生实现 Slider 创建一个基础的 Slider 组件,通过 v-m…

实现 vue 框架

实现 vue 框架

Vue 框架的基本实现 Vue 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是实现 Vue 框架的基本步骤和核心概念。 核心概念 响应式数据绑定 Vue 的核心特性之一是响应式数…

vue 实现回复

vue 实现回复

Vue 实现回复功能 在 Vue 中实现回复功能通常涉及表单提交、数据绑定和列表渲染。以下是实现步骤和代码示例: 数据绑定与表单 <template> <div>…