2017-09-05 74 views
0

我使用evntbus在第一個中的兩個組件 之間傳遞數據時,我點擊按鈕提交的函數是這樣執行的,我發送對象數組到另一個組件在vue事件總線發送的對象的訪問值js

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

+0

您可以登錄'productObject'到控制檯?你確定它包含'products'屬性還是數組? – Tomer

+0

https://i.stack.imgur.com/22hl7.png – mar

+0

從您附加的日誌判斷,productObject是一個包含一個元素的數組 - 當您發出this.products而不是this.product。 – raina77ow

回答

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)); 
+0

thnx您的回覆我犯了一個錯誤,當我複製代碼我寫它就像你說的,但我不能訪問第二部分中的值 – mar