Vue.js全球活动巴士

Mah*_*dam 15 javascript vue.js

我正在尝试创建一个全局事件总线,以便两个兄弟组件可以相互通信.我四处寻找; 但是,我找不到任何实现方法的例子.这是我到目前为止:

var bus = new Vue();

Vue.component('Increment', {
  template: "#inc",
  data: function() {
   return ({count: 0})
  },
  methods: {
    increment: function(){
      var increment = this.count++
      bus.$emit('inc', increment)
  }
 }
})

Vue.component('Display', {
  template: "#display",
  data: function(){
  return({count: 0})
  },
 created: function(){
   bus.$on('inc', function(num){
   alert(num)
   this.count = num;
  });
 }
})


vm = new Vue({
 el: "#example",
})
Run Code Online (Sandbox Code Playgroud)

我创建了我的模板:http://codepen.io/p-adams/pen/PzpZBg

我希望Increment组件将计数传递给Display组件.我不确定我做错了什么bus.$on().

Jef*_*eff 33

问题是在你的bus.$on功能中,this指的是总线.您只需要使用以下命令将当前Vue实例绑定到该函数.bind():

bus.$on('inc', function(num){
 alert(num)
 this.count = num;
}.bind(this));
Run Code Online (Sandbox Code Playgroud)

如果要管理全局应用程序状态,还应该查看https://github.com/vuejs/vuex.

编辑:由于这个页面似乎得到了很多点击,我想编辑并添加另一种方法,根据评论中的每个ChristopheMarois:

bus.$on('inc', (num) => {
 alert(num);
 this.count = num;
});
Run Code Online (Sandbox Code Playgroud)

或删除警报:

bus.$on('inc', (num) => this.count = num);
Run Code Online (Sandbox Code Playgroud)

  • 一个错误可能是您使用“ var增量= this.count ++;”来进行增量计数。将其更改为`var增量= ++ this.count;`。这样,`count`在分配给`increment`之前就增加了。 (2认同)
  • 另一个解决方案是使用箭头函数(自动绑定相同范围的词法“ this”),例如“ bus。$ on('inc',num => this.count = num)”。 (2认同)
  • 谢谢@ChristopheMarois我添加了箭头功能版本,因为这个页面似乎获得了很多观点 (2认同)