Vuejs - 在非父子组件之间交换信息

Posted

技术标签:

【中文标题】Vuejs - 在非父子组件之间交换信息【英文标题】:Vuejs - exange informations between non parent-child components 【发布时间】:2018-03-14 19:30:57 【问题描述】:

我正在尝试在两个 VueJs 组件之间交换信息。

情况如下:

组件 A 是主要组件。 B和C属于A,D属于C。

我想从组件 B 更改组件 D 的变量值。

我看到here 说,如果组件使用相同的根组件,我们可以从第一个组件到根组件进行广播,然后在将广播数据从根组件获取到第二个组件之后。 但就我而言,我的组件 D 并不直接位于根目录中,而是位于“组件树”的更深处……所以,我尝试过,似乎这不起作用。

什么是最简单或更优雅的方法?

谢谢。

【问题讨论】:

How can I share data between non parent-child components in Vue的可能重复 【参考方案1】:

对于这样的事情,我会使用 vue 文档中描述的 Eventbus;用于传递信息的空白 Vue 对象。

window.EventBus = new Vue();

然后在接收数据的组件中,您将创建一个事件。

mounted: function () 
    EventBus.$on('name', function (data) 
        // Do something with the data
    );

最后,在发送数据的组件中,你需要调用那个函数。

methods: 
    someFunction: function () 
        EventBus.$emit('name', data);
    

您可以创建一个原型链接以提供对 EventBus 对象的访问以方便使用。

Vue.prototype.$eventBus = window.EventBus

您可以使用this.$eventBus.$onthis.$eventBus.$emit 访问,如jsFiddle 所示。

【讨论】:

谢谢!我使用的是Vue-cli,所以我没有使用与您相同的语法(xxx.xx = new Vue(); ...我开始从事vuejs和Web开发,但我不知道如何在我的组件中使用你的帮助。你能帮我吗? 其实我用的是单页组件,具体模板里你说的我不知道怎么用。 好的,我明白了。使用单页组件模板时,我创建了一个 eventBus.js 文件,包括“从 vue 导入 Vue\n let bus = new Vue()\n 导出默认总线”等如果我需要从我的 eventBus 发出或监听事件,我只需要“从'@/path/eventBus'导入总线”然后像这样使用它:'bus.$on('myEvent', myVariable)' 抱歉,上周很忙。如果您使用的是组件,我通常会将其转换为插件。这样你就可以在你的主javascript中使用Vue.use(plugin),那么你的所有组件都可以访问EventBus对象。 好的,很有趣!那么,这样的话,我怎么称呼这个新插件呢?

以上是关于Vuejs - 在非父子组件之间交换信息的主要内容,如果未能解决你的问题,请参考以下文章

vuejs2在父子之间传递数据正在擦除子值

vuejs 父子组件传值实例

ref实现父子组件之间通信

Android:组件之间的意图和交换数据

父组件和子组件之间交换数据

vuejs - 在组件之间共享 websocket 连接