当前位置:首页 > VUE

vue实现兄弟组件通信

2026-02-20 20:44:19VUE

使用事件总线(Event Bus)

创建一个空的 Vue 实例作为事件总线,用于在兄弟组件之间传递事件和数据。

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

在发送组件中触发事件:

// ComponentA.vue
import { EventBus } from './eventBus.js';

methods: {
  sendMessage() {
    EventBus.$emit('message', this.message);
  }
}

在接收组件中监听事件:

// ComponentB.vue
import { EventBus } from './eventBus.js';

created() {
  EventBus.$on('message', (message) => {
    console.log(message);
  });
}

使用 Vuex 状态管理

Vuex 是 Vue 的官方状态管理库,适合大型应用中的组件通信。

定义 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;
    }
  }
});

在发送组件中提交 mutation:

// ComponentA.vue
methods: {
  updateSharedData() {
    this.$store.commit('updateData', this.message);
  }
}

在接收组件中获取 state:

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

使用父组件作为中介

通过父组件作为中介,使用 props 和自定义事件实现兄弟组件通信。

vue实现兄弟组件通信

父组件模板:

<!-- Parent.vue -->
<template>
  <child-a @send="handleSend" />
  <child-b :message="message" />
</template>

父组件逻辑:

// Parent.vue
data() {
  return {
    message: null
  };
},
methods: {
  handleSend(message) {
    this.message = message;
  }
}

发送组件触发事件:

// ChildA.vue
methods: {
  sendMessage() {
    this.$emit('send', this.message);
  }
}

接收组件通过 props 获取数据:

// ChildB.vue
props: ['message']

使用 provide/inject

适用于深层嵌套组件,但不推荐用于兄弟组件通信。

vue实现兄弟组件通信

父组件提供数据:

// Parent.vue
provide() {
  return {
    sharedData: this.sharedData
  };
},
data() {
  return {
    sharedData: null
  };
},
methods: {
  updateSharedData(data) {
    this.sharedData = data;
  }
}

子组件注入数据:

// ChildB.vue
inject: ['sharedData']

使用 $parent 和 $children

直接访问父组件和子组件实例,但不推荐使用,因为会破坏组件封装性。

发送组件:

// ComponentA.vue
methods: {
  sendMessage() {
    this.$parent.message = this.message;
  }
}

接收组件:

// ComponentB.vue
computed: {
  message() {
    return this.$parent.message;
  }
}

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

相关文章

react组件如何通讯

react组件如何通讯

React 组件通讯方式 React 组件间的通讯方式主要包括以下几种方法,适用于不同场景下的数据传递和状态管理需求。 父子组件通讯(Props 传递) 父组件通过 props 向子组件传递数据或回…

vue组件实现vmodel

vue组件实现vmodel

Vue 组件实现 v-model 在 Vue 中,v-model 是双向数据绑定的语法糖,默认情况下绑定 value 属性并监听 input 事件。在自定义组件中实现 v-model 需要正确配置 p…

vue实现弹窗组件

vue实现弹窗组件

实现弹窗组件的基本结构 在Vue中创建一个弹窗组件通常需要三个核心部分:组件模板、样式和逻辑控制。弹窗组件应具备打开、关闭功能,并支持内容插槽或属性传入。 <template> &l…

vue实现头像组件

vue实现头像组件

Vue 头像组件实现 基础实现 创建一个可复用的头像组件,支持图片链接或文字缩写显示: <template> <div class="avatar" :style="ava…

vue实现搜索组件

vue实现搜索组件

Vue 实现搜索组件的方法 基础搜索组件实现 创建基础搜索组件需要包含输入框和搜索按钮。在Vue中可以使用v-model绑定输入值,通过@click或@keyup.enter触发搜索。 <te…

vue实现轮播组件

vue实现轮播组件

使用Swiper实现轮播组件 Swiper是一个流行的开源轮播库,支持Vue集成。安装Swiper和Vue相关依赖: npm install swiper vue-awesome-swiper 引入…