Vue父子組件通信的方法其實有不少,本文只是作一個總結,說說他們的優缺點,具體如何使用相關文檔和網上大神已經總結的不少裏,這裏就再也不說明。html
Vuex 是一個專爲 Vue.js 應用程序開發的狀態管理模式。它採用集中式存儲管理應用的全部組件的狀態,
並以相應的規則保證狀態以一種可預測的方式發生變化。Vuex 也集成到 Vue 的官方調試工具 devtools extension,
提供了諸如零配置的 time-travel 調試、狀態快照導入導出等高級調試功能。
vuex是我平時項目裏常常用的工具之一,相信你們在項目中確定也常常會使用它vue
請參考官網傳送門vuex
優勢數組
缺點ide
經過共享一個vue實例,使用該實例的$on以及$emit實現數據傳遞。工具
下面是簡單的使用方法學習
// bus.js import Vue from 'vue' export default new Vue({}) // component-a.js import bus from './bus.js' export default { created () { bus.$on('event-name', (preload) => { // ... }) } } // component-b.js import bus from './bus.js' export default { created () { bus.$emit('event-name', preload) } }
優勢ui
缺點this
因爲是都使用一個Vue實例,因此容易出現重複觸發的情景,例如:url
最基本的父組件給子組件傳遞數據方式,將咱們自定義的屬性傳給子組件,子組件經過$emit方法,觸發父組件v-on的事件,從而實現子組件觸發父組件方法
優勢
缺點
\$attrs/\$listeners能夠將父組件的props和事件監聽器繼承給子元素,在子組件能夠調用到父組件的事件和props
在父組件上經過provide提供給後代組件的數據/方法,在後代組件上經過inject來接收被注入的數據/方法。
優勢
缺點
它將你的應用以目前的組件組織方式耦合了起來,使重構變得更加困難。
,我對這句話的理解是用了provide/inject你就要遵循它的組件組織方式,在項目的重構時若是要破壞這個組織方式會有額外的開發成本,其實event-bus也有這個問題。你能夠在組件的html模版裏添加自定義內容,這個內容能夠是任何代碼模版,就像:
<navigation-link url="/profile"> <!-- 添加一個 Font Awesome 圖標 --> <span class="fa fa-user"></span> Your Profile </navigation-link>
父組件模板的全部東西都會在父級做用域內編譯;子組件模板的全部東西都會在子級做用域內編譯。
你也能夠經過slot-scope
屬性來實現從子組件將一些信息傳遞給父組件,注意這個屬性是vue2.1.0+新增的。
優勢
缺點
經過\$parent/\$children能夠拿到父子組件的實例,從而調用實例裏的方法,實現父子組件通訊。並不推薦這種作法。
經過this.$parent
或者this.$children
拿到父或子組件實例。官方傳送門
優勢
缺點
this.$children
拿到的是一個數組,你並不能很準確的找到你要找的子組件的位置,尤爲是子組件多的時候。