当前位置:首页 > 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 折叠组件实现方法 基于 v-show 和事件触发 通过 v-show 控制内容的显示与隐藏,结合点击事件切换状态。 <template> <div> &…

vue 实现组件刷新

vue 实现组件刷新

实现组件刷新的方法 在Vue中,组件刷新通常指重新渲染组件或重置组件状态。以下是几种常见的实现方式: 使用v-if控制渲染 通过v-if指令可以销毁并重新创建组件: <template>…

vue实现组件

vue实现组件

Vue 实现组件的方法 Vue 中实现组件可以通过多种方式,包括全局注册、局部注册、单文件组件(SFC)等。以下是常见的实现方法。 全局注册组件 全局注册的组件可以在任何 Vue 实例或组件中使用。…

vue实现组件缓存

vue实现组件缓存

Vue 组件缓存的实现方法 在 Vue 中实现组件缓存通常使用 <keep-alive> 内置组件,它可以缓存不活动的组件实例,避免重复渲染和销毁。 基本用法 <keep-aliv…

vue实现组件刷新

vue实现组件刷新

强制重新渲染组件 使用 this.$forceUpdate() 方法可以强制 Vue 实例重新渲染,但不会更新子组件。适用于依赖非响应式数据的情况。 methods: { refreshComp…

vue组件实现原理

vue组件实现原理

Vue 组件实现原理 Vue 组件的核心实现基于以下机制: 组件注册与模板解析 Vue 组件通过 Vue.component() 或单文件组件(.vue 文件)注册。模板会被编译成渲染函数,最终生成…