使用eventbus在vue js中发送的对象的访问值

时间:2017-09-05 13:49:10

标签: javascript vuejs2 event-bus

我使用evntbus在两个组件之间传递数据 在第一个单击按钮时,提交的函数就像这样执行,我将对象数组发送到另一个组件

submitted(){
  this.products.push(this.product); 
  EventBus.$emit('prod', this.products); 
}

和另一个组成部分:

created(){
  EventBus.$on('prod', function (productObject) {
    console.log('event received!', userObject);
    this.produc = productObject.products
    console.log('The product: ', this.produc)
  }.bind(this));
  console.log('User outside eventbus:', this.produc);
}

问题是我无法访问第二个组件中使用eventbus传递的对象,任何人都无法帮助我吗? productobject的价值是

image

1 个答案:

答案 0 :(得分:1)

首先,它应该是EventBus.$emit('prod', this.products);,因为你在EventBus上发出事件,而不是在组件上。

其次,将this.products(数组)传递给事件总线,但似乎将其视为处理函数中的单个对象。此外,您正试图访问它的某些任意值(产品),显然认为事件数据对象以某种方式记住它存储在哪个变量中。但事实并非如此。

因此,根据您是否确实需要将整个产品系列传递到EventBus,您有两种选择:

1)如果你确实需要this.products,请访问其他组件中的最后一个元素:

EventBus.$on('prod', function(products) {
  this.product = products[products.length - 1]; 
  console.log('The product: ', this.product);
}.bind(this));

2)如果没有,只需发送单品并直接使用:

EventBus.$emit('prod', this.product);

// ...and in another component
EventBus.$on('prod', function(product) {
  this.product = product; 
  console.log('The product: ', this.product);
}.bind(this));