当前位置:首页 > VUE

实现vue兄弟组件通信

2026-01-22 03:49:00VUE

使用事件总线(Event Bus)

创建一个全局的事件总线实例,通过$emit$on实现组件间通信。

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

在发送组件中触发事件:

import { EventBus } from './eventBus.js';
EventBus.$emit('eventName', data);

在接收组件中监听事件:

import { EventBus } from './eventBus.js';
EventBus.$on('eventName', (data) => {
  console.log(data);
});

通过父组件作为桥梁

父组件通过props接收子组件A的数据,再通过v-on将数据传递给子组件B。
子组件A发送数据:

this.$emit('updateData', data);

父组件模板:

实现vue兄弟组件通信

<child-a @updateData="handleData"></child-a>
<child-b :data="sharedData"></child-b>

父组件逻辑:

data() {
  return { sharedData: null };
},
methods: {
  handleData(data) {
    this.sharedData = data;
  }
}

使用Vuex状态管理

适用于复杂场景,通过集中式存储管理组件间的共享状态。
定义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;
    }
  }
});

组件A提交变更:

实现vue兄弟组件通信

this.$store.commit('updateData', data);

组件B获取数据:

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

使用$refs直接访问

通过父组件的$refs直接调用子组件方法(不推荐,破坏组件封装性)。
父组件模板:

<child-a ref="childA"></child-a>
<child-b ref="childB"></child-b>

父组件逻辑:

this.$refs.childB.methodName(this.$refs.childA.data);

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

相关文章

vue VUE实现日历组件功能

vue VUE实现日历组件功能

Vue 日历组件实现方法 基础日历结构 使用Vue的模板语法构建日历的HTML结构,通常包含头部(年月显示、切换按钮)和日历表格(星期标题和日期格子)。 <template> <…

uniapp 分页组件

uniapp 分页组件

uniapp 分页组件实现方法 在uniapp中实现分页功能,可以通过自定义组件或使用第三方组件库完成。以下是几种常见实现方式: 自定义分页组件 创建一个名为uni-pagination的组件,模板…

vue表格组件实现

vue表格组件实现

Vue表格组件实现 基础表格实现 使用el-table组件实现基础表格功能。安装Element UI后,引入el-table和el-table-column组件。 <template>…

vue实现递归组件

vue实现递归组件

递归组件的实现方法 在Vue中实现递归组件主要依靠组件调用自身的能力。以下是几种常见的实现方式: 使用组件name属性 通过组件的name属性实现递归调用是最简单的方式: <template…

vue 组件实现 遮罩

vue 组件实现 遮罩

Vue 组件实现遮罩层的方法 基础遮罩层实现 创建一个简单的遮罩层组件,使用绝对定位覆盖整个视口。以下是一个基础实现: <template> <div class="mask"…

vue实现弹窗组件

vue实现弹窗组件

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