当前位置:首页 > VUE

vue如何实现左右联动

2026-01-21 14:40:06VUE

Vue 实现左右联动的方法

左右联动通常指两个独立的组件或列表(如左侧菜单和右侧内容)在交互时能够同步更新。以下是几种常见的实现方式:

使用 v-model 和自定义事件

通过 v-model 绑定数据,利用自定义事件实现父子组件间的通信。

vue如何实现左右联动

<!-- 父组件 -->
<template>
  <div>
    <LeftPanel v-model="activeItem" @update="handleUpdate" />
    <RightContent :activeItem="activeItem" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      activeItem: null
    };
  },
  methods: {
    handleUpdate(item) {
      this.activeItem = item;
    }
  }
};
</script>
<!-- LeftPanel 子组件 -->
<template>
  <div>
    <div v-for="item in items" @click="$emit('update', item)">
      {{ item }}
    </div>
  </div>
</template>

使用 Vuex 状态管理

通过 Vuex 集中管理状态,实现跨组件数据共享。

vue如何实现左右联动

// store.js
export default new Vuex.Store({
  state: {
    activeItem: null
  },
  mutations: {
    setActiveItem(state, item) {
      state.activeItem = item;
    }
  }
});
<!-- LeftPanel 组件 -->
<template>
  <div>
    <div v-for="item in items" @click="selectItem(item)">
      {{ item }}
    </div>
  </div>
</template>

<script>
export default {
  methods: {
    selectItem(item) {
      this.$store.commit('setActiveItem', item);
    }
  }
};
</script>
<!-- RightContent 组件 -->
<template>
  <div>
    {{ $store.state.activeItem }}
  </div>
</template>

使用 Event Bus

通过全局事件总线实现非父子组件间的通信。

// main.js
Vue.prototype.$eventBus = new Vue();
<!-- LeftPanel 组件 -->
<template>
  <div>
    <div v-for="item in items" @click="$eventBus.$emit('item-selected', item)">
      {{ item }}
    </div>
  </div>
</template>
<!-- RightContent 组件 -->
<template>
  <div>
    {{ selectedItem }}
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectedItem: null
    };
  },
  created() {
    this.$eventBus.$on('item-selected', item => {
      this.selectedItem = item;
    });
  }
};
</script>

使用 provide/inject

适用于深层嵌套组件的通信,父组件通过 provide 提供数据,子组件通过 inject 注入。

<!-- 父组件 -->
<template>
  <div>
    <LeftPanel />
    <RightContent />
  </div>
</template>

<script>
export default {
  provide() {
    return {
      sharedState: this.sharedState
    };
  },
  data() {
    return {
      sharedState: {
        activeItem: null
      }
    };
  }
};
</script>
<!-- LeftPanel 子组件 -->
<template>
  <div>
    <div v-for="item in items" @click="sharedState.activeItem = item">
      {{ item }}
    </div>
  </div>
</template>

<script>
export default {
  inject: ['sharedState']
};
</script>

选择建议

  • 简单场景:使用 v-modelEvent Bus
  • 中大型项目:优先选择 Vuexprovide/inject
  • 跨层级组件:provide/inject 更合适。

标签: 如何实现vue
分享给朋友:

相关文章

vue实现弹窗可切换

vue实现弹窗可切换

实现弹窗可切换的 Vue 方案 动态组件切换 通过 Vue 的 <component :is="currentComponent"> 动态加载不同弹窗组件,结合 v-if 控制显示状态。…

vue 实现递归

vue 实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据,例如菜单、评论列表或文件目录。以下是实现递归组件的关键步骤: 定义递归组件 递归组件需要设置 name 属性,以便在模…

vue实现全屏

vue实现全屏

Vue 实现全屏功能的方法 在 Vue 中实现全屏功能可以通过浏览器提供的 Fullscreen API 来实现。以下是几种常见的实现方式: 使用原生 Fullscreen API 通过调用 doc…

vue实现影院

vue实现影院

Vue实现影院功能的基本思路 使用Vue框架开发影院功能需要结合前端组件化开发、状态管理以及后端API交互。以下是关键实现步骤: 影院页面布局设计 影院页面通常分为顶部导航栏、影院列表区域和底部导航…

vue实现插件

vue实现插件

Vue 插件实现方法 Vue 插件通常用于为 Vue 应用添加全局功能或共享功能。以下是实现 Vue 插件的核心步骤: 插件基本结构 Vue 插件需要暴露一个 install 方法,该方法接收 Vu…

vue实现子表格

vue实现子表格

Vue 实现子表格的方法 在 Vue 中实现子表格可以通过多种方式完成,以下是几种常见的方法: 使用嵌套组件 创建一个父表格组件和一个子表格组件,通过 props 将数据传递给子表格组件。父表格的每…