当前位置:首页 > VUE

实现vue兄弟组件通信

2026-01-22 03:49:00VUE

使用事件总线(Event Bus)

创建一个全局的事件总线实例,通过$emit$on实现组件间通信。

// eventBus.js
import Vue from 'vue';
export const EventBus = new Vue();

在发送组件中触发事件:

import { EventBus } from './eventBus.js';
EventBus.$emit('eventName', data);

在接收组件中监听事件:

import { EventBus } from './eventBus.js';
EventBus.$on('eventName', (data) => {
  console.log(data);
});

通过父组件作为桥梁

父组件通过props接收子组件A的数据,再通过v-on将数据传递给子组件B。
子组件A发送数据:

this.$emit('updateData', data);

父组件模板:

实现vue兄弟组件通信

<child-a @updateData="handleData"></child-a>
<child-b :data="sharedData"></child-b>

父组件逻辑:

data() {
  return { sharedData: null };
},
methods: {
  handleData(data) {
    this.sharedData = data;
  }
}

使用Vuex状态管理

适用于复杂场景,通过集中式存储管理组件间的共享状态。
定义Vuex store:

// store.js
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);

export default new Vuex.Store({
  state: { sharedData: null },
  mutations: {
    updateData(state, payload) {
      state.sharedData = payload;
    }
  }
});

组件A提交变更:

实现vue兄弟组件通信

this.$store.commit('updateData', data);

组件B获取数据:

computed: {
  sharedData() {
    return this.$store.state.sharedData;
  }
}

使用$refs直接访问

通过父组件的$refs直接调用子组件方法(不推荐,破坏组件封装性)。
父组件模板:

<child-a ref="childA"></child-a>
<child-b ref="childB"></child-b>

父组件逻辑:

this.$refs.childB.methodName(this.$refs.childA.data);

标签: 组件兄弟
分享给朋友:

相关文章

vue实现组件

vue实现组件

Vue 组件实现基础 Vue 组件是可复用的 Vue 实例,用于封装 UI 和逻辑。通过 .vue 文件或直接注册组件实现。 单文件组件 (SFC) 示例 <template>…

vue实现组件跟随

vue实现组件跟随

实现组件跟随的常见方法 使用CSS定位 通过CSS的position: fixed或position: absolute属性实现组件跟随。需要结合JavaScript计算目标元素的位置。 <…

vue实现广告组件

vue实现广告组件

Vue 实现广告组件的核心方法 数据驱动的广告内容渲染 通过 props 接收广告数据(如图片URL、跳转链接等),使用 v-bind 动态绑定属性。典型结构包含 <a> 标签嵌套 <…

vue实现水印组件

vue实现水印组件

Vue 水印组件实现 基础水印组件实现 创建一个基础水印组件,通过 props 接收文本、颜色、大小等参数: <template> <div class="watermark-…

vue哪个组件实现动画

vue哪个组件实现动画

在Vue中实现动画效果,可以通过以下组件和方法实现: Vue内置动画组件 Vue提供了<transition>和<transition-group>两个内置组件,用于处理进…

vue如何实现目录组件

vue如何实现目录组件

实现目录组件的基本思路 在Vue中实现目录组件通常需要结合页面内容的结构化数据(如标题层级),通过动态渲染生成可交互的目录。核心步骤包括提取标题、生成目录结构、实现滚动联动等。 提取标题信息 通过…