App下載

Vue中組件間通信有哪幾種方式

不解風情的老妖怪 2021-12-17 10:09:35 瀏覽數(shù) (2913)
反饋

父子組件

props/event

子組件有時需要與父組件進行溝通,溝通的方式就是子組件 $emit 傳遞一個自定義事件,父組件通過監(jiān)聽這個事件來做進一步動作。而父組件與子組件通信則使用 props來傳遞一個綁定在子組件上的屬性,這個屬性值來源于父組件。


parent/children

父組件中使用 $children 操作子組件。并在父組件通過 $children 訪問到已經(jīng)在在父組件當中引入了的子組件, $children 返回的是子組件列表,是一個數(shù)組。

子組件中子組件可通過 $parent 來訪問父組件里的數(shù)據(jù)和定義的方法,如修改父組件中的$data。

ref

父組件中可為子組件定義一個ref屬性,然后父組件里通過$ref[對象子組件上定義的屬性名來訪問子組件里的數(shù)據(jù)


provide/inject

適用于祖先和后代關(guān)系的組件間的通信,祖先元素通過 provide 提供一個值,后代元素則通過 inject 獲取到這個值。這個值默認是非響應的,如果是對象那么則是響應式的:


兄弟組件

bus

在Vue . 2.x 中, 推薦使用一個空的Vue 實例作為中央事件總線( bus ),也就是一個中介。

通信的組件必須都引入這個實例例。

通過bus.$emit() 傳遞出一個自定義事件

在需要進行操作的組件里,通過bus.$on 監(jiān)聽這個自定義事件, 進行操作。


Vuex

Vuex 是Vue推出的狀態(tài)管理工具

Vuex 就是把需要共享的變量量全部存儲在一個對象里面,然后將這個對象放在頂層組件中供其他組件使用。這么說吧,將vue想作是一個js?文件、組件是函數(shù),那么vuex就是一個全局變量,只是這個“全局變量”包含了一些特定的規(guī)則而已。

通過$store 這個對象訪問數(shù)據(jù)和調(diào)用在Vuex 里定義的公共方法。


跨級組件

bus vuex provide inject


0 人點贊