当前位置:首页 > 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 和自定义事件实现兄弟组件通信。

父组件模板:

<!-- 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

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

父组件提供数据:

// 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;
  }
}

接收组件:

vue实现兄弟组件通信

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

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

相关文章

vue实现组件循环图片

vue实现组件循环图片

Vue 实现组件循环图片的方法 在 Vue 中实现组件循环图片通常可以通过 v-for 指令结合动态数据绑定完成。以下是几种常见的实现方式: 使用静态图片路径数组 假设有一组本地图片路径,可以通过数…

vue实现水印组件

vue实现水印组件

Vue 水印组件的实现方法 使用Canvas绘制水印 在Vue组件中通过Canvas动态生成水印图案,将其作为背景添加到目标元素上。 <template> <div ref="…

react如何删除组件

react如何删除组件

删除 React 组件的几种方法 条件渲染法 通过状态控制组件是否渲染。当状态为 false 时,组件会被移除: const [showComponent, setShowComponent…

vue抽屉组件实现

vue抽屉组件实现

Vue 抽屉组件实现 使用 Element UI 实现 Element UI 提供了现成的抽屉组件 el-drawer,可以快速实现抽屉效果。 安装 Element UI: npm install…

vue实现树组件

vue实现树组件

Vue 树形组件的实现方法 递归组件实现 使用 Vue 的递归组件特性可以轻松实现树形结构。定义一个组件,该组件能够调用自身来渲染子节点。 <template> <ul>…

vue 动态组件实现

vue 动态组件实现

vue 动态组件实现 Vue 的动态组件功能允许根据条件或用户交互动态切换不同的组件,主要通过 <component> 标签和 is 属性实现。 基本用法 通过 is 属性绑定组件名或组…