Vue父子組件通信的方法其實有不少,本文只是作一個總結,說說他們的優缺點,具體如何使用相關文檔和網上大神已經總結的不少裏,這裏就再也不說明。html
Vuex 是一個專爲 Vue.js 應用程序開發的狀態管理模式。它採用集中式存儲管理應用的全部組件的狀態, 並以相應的規則保證狀態以一種可預測的方式發生變化。Vuex 也集成到 Vue 的官方調試工具 devtools extension, 提供了諸如零配置的 time-travel 調試、狀態快照導入導出等高級調試功能。vue
vuex是我平時項目裏常常用的工具之一,相信你們在項目中確定也常常會使用它vuex
官網傳送門數組
經過共享一個vue實例,使用該實例的$on以及$emit實現數據傳遞。ide
下面是簡單的使用方法工具
// 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)
}
}
複製代碼
最基本的父組件給子組件傳遞數據方式,將咱們自定義的屬性傳給子組件,子組件經過$emit方法,觸發父組件v-on的事件,從而實現子組件觸發父組件方法學習
$emit/$on使用傳送門this
優勢url
缺點
$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
拿到的是一個數組,你並不能很準確的找到你要找的子組件的位置,尤爲是子組件多的時候。