当前位置:首页 > 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 中实现组件可以通过多种方式,包括全局注册、局部注册、单文件组件(SFC)等。以下是常见的实现方法。 全局注册组件 全局注册的组件可以在任何 Vue 实例或组件中使用。…

uniapp 滑动组件

uniapp 滑动组件

uniapp 滑动组件实现方法 使用swiper组件 uniapp内置的swiper组件可以实现滑动效果,适用于轮播图或页面切换场景。 示例代码: <swiper :indicator-d…

vue实现列表组件

vue实现列表组件

Vue 列表组件实现方法 基础列表渲染 使用 v-for 指令渲染数组数据,需配合 :key 提升性能: <template> <ul> <li v-for…

vue实现抽屉组件

vue实现抽屉组件

实现抽屉组件的基本思路 抽屉组件通常用于从屏幕边缘滑出的交互式面板,常见于移动端或后台管理系统。Vue中可以通过动态CSS和过渡动画实现这一效果。 基础HTML结构 <template&g…

vue实现组件重叠

vue实现组件重叠

Vue 实现组件重叠的方法 在 Vue 中实现组件重叠通常需要结合 CSS 的定位属性(如 position、z-index)和 Vue 的动态渲染机制。以下是几种常见实现方式: 使用绝对定位(Ab…

vue布局组件实现

vue布局组件实现

Vue 布局组件实现方法 基础布局组件设计 使用 Vue 的单文件组件(SFC)创建一个基础的布局组件框架,通常包含<header>、<main>、<footer>…