Vuejs中同级组件之间的通信

Communication between sibling components in Vuejs

本文关键字:之间 通信 组件 Vuejs      更新时间:2023-12-02

使用$broadcast$dispatch ,父组件和子组件之间的通信非常简单

我试图解决的问题是兄弟组件之间的通信。我目前所做的是在子组件上运行一个$dispatch,然后被父组件vm上的一个事件捕获,该事件又是同级组件的$broadcast

IE(非功能性,简化示例):

new Vue({
    components: { Brother, Sister },
    events: {
        'brother-to-sister-event': function(message) {
            this.$broadcast('message-to-sister', message);
        }
});
Brother
    this.$dispatch('brother-to-sister-event', message)
Sister
    events: {
        'message-to-sister': function(message) {
            alert('Message from Brother receiced!');
        }
    }

我只是觉得我在做很多关于我的数据如何在兄弟组件之间传递的乒乓球。我在文档中找不到一个处理此问题的好例子。上面的例子是我最好的解决方案

有人有一个很好的例子来说明如何以更有效的方式处理这件事吗?我的目标是,当我从哥哥那里拿到$broadcast$dispatch时,姐姐会立即拿到。在这样做的过程中,我不必用中间事件来扰乱根vm

所以解决方案应该是这样的:

new Vue({
    components: { Brother, Sister }
});
Brother
    this.$dispatch('brother-to-sister-event', message)
Sister
    events: {
        'brother-to-sister-event': function(message) {
            alert('Message from Brother receiced!');
        }
    }

但我没能让这样的东西发挥作用。

兄弟组件的Plain Vue.js通信只能通过父组件完成,正如您在示例中所描述的那样。

为更复杂的应用程序处理这些情况的一种更复杂的方法是中央状态管理器。

Vue.js创建者发布了一个类似redux的组件,当与vuejs一起使用时,它会通过在商店上调度操作来更新它们的状态。然后,vuejs框架的"反应性"会拾取对组件状态所做的任何更改,并重新呈现它们。

组件的文档非常好
Vuex
Vuex文档
Vuex todo mvc示例