2016-07-03 52 views
0

我有一個問題,當與不同的父組件通信時,vue.js的通用組件的最佳實踐如何?Vue通用組件與不同的父項進行通信

例如,在我的情況下,基本模態分量,觸發「關閉」的方法,但它有兩個不同的父組件

我找到兩個解決方案:

  1. 家長需要傳遞一個額外的道具,然後baisc組件只是 觸發事件哪個事件的名稱是prop值,所以聆聽者 可能會調用

  2. 基本模態j UST使用。$父訪問父組件的方法,或本。$ parent.trigger(「XXX」),然後父母都知道該怎麼做

但是,上述兩種我覺得不是很好,首先可能需要傳遞一個額外的道具,這讓其他編寫第三,第四個父元件的人使用的基本組件不太方便。而第二個可能會感覺更加硬編碼。

那麼,在這種情況下是否有更好的解決方案?

+0

我會去的第二個選項,反正你說'基本模態分量,觸發「關閉」 method',應該由模組件本身不是由母公司持有close方法?或者你可能想要觸發關閉其他元素?顯示您的代碼,以便我可以清楚地弄清楚。 – Rifki

回答

0

使用this.$dispatch('eventName', data)(對於Vue的2.x中,使用this.$emit('eventName', data)),觸發事件任何父母,祖父母和進一步與鏈(可以使用this.$broadcast('eventName', data)觸發事件倒在Vue公司< 2.X鏈)。

如果父母有一個名爲'eventName'的事件,那麼它將觸發此事件。

如果你有多個父母,你可以給他們每個不同的事件,並從孩子通過派遣激發這個特定的事件。您也可以爲每個父母提供相同的事件並傳遞一個數據支持,以指定父母應該執行的操作。第三種選擇是指具體的父代:

var parent = new Vue({ el: '#parent' }) 
// access child component instance 
parent.$refs.eventName() 

每個選項都有優點和缺點。最好的解決方案取決於上下文。但我認爲最好的解決方案通常是選項1.然後您不需要額外的數據參數。選項3不鬆散耦合。

欲瞭解更多信息:https://vuejs.org/guide/components.html

+0

注意:這不適用於Vue 2.0+ –

+0

在Vue 2.0+中使用'this。$ emit('eventName',data)'來觸發父事件而不是'$ dispatch' – Windo

相關問題