2016-12-02 105 views
4

在vue2.0中,不建議使用事件$dispatch$broadcast。我發現$dispatch$emit類似。

他們之間有什麼不同?遷移時是否安全直接將$dispatch替換爲$emit

+0

的Vue 2.不同的方式處理代碼*已刪除'$ dispatch'和'$ broadcast'。他們現在推薦使用事件中心。 https://vuejs.org/v2/guide/migration.html#dispatch-and-broadcast-replaced – peter

回答

7

不,您無法將$disptach替換爲$emit。您可以將其替換,無論您使用何種通訊方式從孩子到父母,但對於其他情況,您可能需要採取其他方法。

documentation(類似的評論埃文你在Upgrade Tips):

其中最常見的用途的這些方法是父母和其子女的直接之間通信。在這些情況下,您實際上可以聽取來自v-on的孩子的$ emit。這使您可以更加明確地保持事件的便利性。

但是,當在遙遠的後代/祖先之間進行通信時,$ emit不會幫助你。相反,最簡單的升級可能是使用集中式事件中心。

$dispatch

調度的事件的文檔,第一觸發它的實例本身,然後沿母鏈向上傳播。傳播在觸發父事件偵聽器時停止,除非該偵聽器返回true。

,另一方面$emit

觸發當前實例的事件。任何其他參數都將傳遞到偵聽器的回調函數中。

所以你可以看到,如果通過$dispatch傳遞通信到父元素的多層,你必須與$emit

+0

好的,這意味着'$ emit'只傳遞給它自己和它的父代,而'$ dispatch'傳遞給冒泡,這樣對嗎? –

+0

在父母子女溝通的背景下:是的,但也有$ emit的其他用途,您可以在[documentation](https://vuejs.org/v2/guide/components.html#Non-Parent-Child -通訊)。但是當你從vue 1遷移時,你需要考慮鏈傳播的這種差異。 – Saurabh