首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vue组件通信

Vue组件通信
EN

Stack Overflow用户
提问于 2015-12-29 10:28:01
回答 6查看 15.4K关注 0票数 34

我有两个Vue组件:

代码语言:javascript
复制
Vue.component('A', {});

Vue.component('B', {});

如何从组件B访问组件A?组件之间的通信是如何工作的?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-12-29 13:42:22

在Vue.js文档中,跨组件通信没有得到太多的关注,也没有很多关于这个主题的教程。由于组件应该是独立的,所以您不应该直接“访问”组件。这将紧密地将组件连接在一起,而这正是您想要阻止的。

Javascript有一个很好的通信方法:事件。Vue.js有一个内置的事件系统,主要用于父子通信.从医生那里

尽管您可以直接访问Vue实例的子实例和父实例,但使用内置事件系统进行跨组件通信更为方便。它还使您的代码更少耦合,更易于维护。一旦建立了父-子关系,就可以使用每个组件的事件实例方法来分派和触发事件。

它们的示例代码说明事件系统:

代码语言:javascript
复制
var parent = new Vue({
  template: '<div><child></child></div>',
  created: function () {
    this.$on('child-created', function (child) {
      console.log('new child created: ')
      console.log(child)
    })
  },
  components: {
    child: {
      created: function () {
        this.$dispatch('child-created', this)
      }
    }
  }
}).$mount()

丹·霍洛兰( Dan )最近在 棋子上写了一篇关于他与跨组件信息的“斗争”的文章。如果您需要在没有父-子关系的组件之间进行通信,这可能会对您有所帮助。

我使用过的另一种方法(除了使用事件进行通信之外)是使用一个中心组件注册中心,该注册中心具有对公共API的引用,并具有绑定到它的组件实例。注册表处理组件的请求并返回其公共API。

在Vue.js的背景下,事件将由我选择。

票数 33
EN

Stack Overflow用户

发布于 2015-12-29 15:06:05

除了比斯拉的答案外,还可以看看指南的构建大型应用程序下的国家管理科管理。我在这里创建了一个小提琴https://jsfiddle.net/WarwickGrigg/xmpLg92c/

这种技术也适用于组件:父-子、兄弟-同胞组件关系等。

代码语言:javascript
复制
var hub = {
  state: {
    message: 'Hello!'
  }
}

var vmA = new Vue({
    el: '#appA',
    data: {
      pState: {
        dA: "hello A" 
    },
    hubState: hub.state
  }
})

var vmB = new Vue({
    el: '#appB',
    data: {
      pState: {
        dB: "hello B"
    },
    hubState: hub.state
  }
})
票数 12
EN

Stack Overflow用户

发布于 2017-02-01 22:22:36

还可以通过在Vue应用程序中创建单个全局事件中心来建立组件之间的通信。就像这样:-

var bus = new Vue();

现在,您可以创建自定义事件并从任何组件中侦听它们。

代码语言:javascript
复制
     // A.vue
    // ...
    doThis() {
        // do the job
    
        bus.$emit('done-this');
    }
    
    // B.vue
    // ...
       method:{
             foo: function()
          }
    created() {
        bus.$on('done-this', foo);
    }

有关这方面的更多信息,可以在来自官方文件。上找到。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34509103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档