Vue組件通信

Vue組件通信

Vue組件關(guān)系可分為三大類: 父子組件 兄弟組件 跨級(jí)組件, 相應(yīng)的組件之間的通信也分類三大類: 父子組件通信 兄弟組件通信 跨級(jí)組件通信

自定義事件

在子組件內(nèi)通過(guò)$emit觸發(fā)自定義事件, 在父組件內(nèi)通過(guò)$on(or v-on @)來(lái)監(jiān)聽(tīng)自定義事件來(lái)處理子組件向父組件傳遞數(shù)據(jù), 同時(shí)v-on(@)可以通過(guò).native修飾符監(jiān)聽(tīng)原生DOM事件

使用v-model

v-model主要用在自定義組件之間的通信, 自定義組件內(nèi)部通過(guò)$emit觸發(fā)一個(gè)特定的input事件, 在父組件外部使用該自定義組件時(shí)通過(guò)v-model綁定到一個(gè)data上(即v-model@input的語(yǔ)法糖);

v-model可用來(lái)創(chuàng)建自定義表單輸入組件, 進(jìn)行數(shù)據(jù)雙向綁定, 實(shí)現(xiàn)方法為: 自定義組件的跟元素為input元素, 綁定其value到組件自身props, 監(jiān)聽(tīng)input元素input change等事件, 其value改變時(shí)$emit一個(gè)input事件, 父組件使用該自定義組件時(shí)v-model綁定到一個(gè)data上, 從而實(shí)現(xiàn)數(shù)據(jù)雙向綁定

非父子組件通信($dispatch $broadcast)

$dispatch和$broadcast是Vue 1.X提供的方法, 在Vue 2.X中已被廢棄

$dispatch: 用于向父級(jí)(一級(jí)或多級(jí))派發(fā)事件, $broadcast: 用于向下級(jí)(一級(jí)或多級(jí))廣播事件, 其事件的發(fā)送和接受采用就近原則, 第一次接收到事件后, 就會(huì)停止冒泡, 除非返回true.

Vue 2.X中被廢棄原因:

  • 基于樹(shù)結(jié)構(gòu)的事件流晦澀難懂;
  • 在組件結(jié)構(gòu)擴(kuò)展過(guò)程中事件流變得愈發(fā)脆弱;
  • 不能解決兄弟組件通信問(wèn)題.

中央事件總線

這是Vue 2.X中一種比較完善的解決跨組件間通信的解決方法, 采用一個(gè)空的Vue實(shí)例作為中央事件總線(bus), 事件的觸發(fā)和監(jiān)聽(tīng)分別通過(guò)bus實(shí)例的$on和$emit實(shí)現(xiàn), 不過(guò)需要注意app實(shí)例生命周期中處理bus的事件監(jiān)聽(tīng)

父鏈

子組件中可以通過(guò)$parent訪問(wèn)該組件的父實(shí)例, 父組件也可以通過(guò)$children訪問(wèn)其所有的子組件, 可遞歸訪問(wèn), 通過(guò)$parent,$children直接修改父實(shí)例,子組件的數(shù)據(jù)從而實(shí)現(xiàn)組件通信, 該方法不推薦使用, 這會(huì)使得父子組件高度耦合, 不利于組件的擴(kuò)展.

子組件索引

即采用組件ref屬性來(lái)快速遍歷出我們需要的子組件, ref為組件制定了一個(gè)索引名稱, 父組件通過(guò)this.$refs來(lái)訪問(wèn)指定索引的組件實(shí)例

vuex

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 參考自vue.js 官方文檔 如果你使用 Vue 進(jìn)行開(kāi)發(fā)的話,你不得不了解的一項(xiàng)就是 Vue 的組件(Compo...
    壽木閱讀 441評(píng)論 0 2
  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內(nèi)容,還有我對(duì)于 Vue 1.0 印象不深的內(nèi)容。關(guān)于...
    云之外閱讀 5,174評(píng)論 0 29
  • 一、組件之間的通信 父組件向子組件傳遞 props this.$parents應(yīng)急方法(包括$children) ...
    JacobMa1996閱讀 535評(píng)論 0 0
  • 一、父組件向子組件通信(Prop) 在子組件里面聲明 props 可以接收父組件傳過(guò)來(lái)的值實(shí)現(xiàn)父組件向子組件的單向...
    除除閱讀 308評(píng)論 0 1
  • 子組件=》父組件 vue的組件之間的通信類似angular的父子層級(jí)之間通信,父組件獲取子組件數(shù)據(jù)步驟大概如下: ...
    羊烊羴閱讀 370評(píng)論 0 3

友情鏈接更多精彩內(nèi)容