当前位置:首页 > 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;
  }
}

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

相关文章

vue实现多级组件

vue实现多级组件

Vue 多级组件实现方法 在 Vue 中实现多级组件通常涉及父子组件通信、动态组件或递归组件等技术。以下是几种常见实现方式: 父子组件嵌套 通过逐层嵌套组件实现多级结构,适用于固定层级场景:…

组件elementui

组件elementui

ElementUI 简介 ElementUI 是一套基于 Vue.js 的桌面端组件库,由饿了么前端团队开发并开源。它提供了丰富的 UI 组件(如按钮、表单、表格等),适合快速构建企业级中后台产品。…

vue动态组件实现

vue动态组件实现

动态组件的基本用法 在Vue中,动态组件通过<component>标签和is属性实现。is属性可以绑定组件名称或组件选项对象,实现动态切换。 <template> <…

vue实现盖章组件

vue实现盖章组件

实现Vue盖章组件的步骤 组件结构设计 创建一个Vue组件,包含画布元素和必要的控制按钮。画布用于显示盖章效果,按钮用于触发盖章操作。组件需要接收图片和盖章位置等参数。 <template&g…

vue实现父子组件

vue实现父子组件

Vue 父子组件通信实现方式 1. 父组件向子组件传递数据(Props) 父组件通过 props 向子组件传递数据,子组件通过 props 接收数据。 父组件模板: <template&…

vue实现树组件

vue实现树组件

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