vue 組件通信方式乐埠,六種方法

好看的網(wǎng)頁千篇一律,有趣的代碼萬里挑一囚企。

“阿彌陀佛,善哉善哉瑞眼×辏”

“魔鏡啊伤疙!魔鏡银酗,誰是這世界上最美麗的女人?”

“愿上帝保佑你徒像,阿門黍特!”

等等,這些語句是不是特別經(jīng)典锯蛀?特別有畫面感灭衷?眼前立馬浮現(xiàn)出家人、后母和牧師旁涤?

通過言語翔曲,可以判斷一個(gè)人的職業(yè)迫像、身份、地位瞳遍。

通過特殊語句可以與神明通話闻妓,可以和精靈共舞。

那么Vue各個(gè)組件之間如何通信掠械?

轉(zhuǎn)載的一篇作者名為“愛學(xué)習(xí)的小仙女早睡早起” 的一篇文章:《vue 組件通信方式》



Vue 組件間通信只要指以下 3 類通信:

父子組件通信由缆、隔代組件通信、兄弟組件通信猾蒂,下面分別介紹每種通信方式且會(huì)說明此種方法可適用于哪類組件間通信均唉。

(1)props / $emit 適用 父子組件通信

父組件注入,子組件接收婚夫。

這種方法是 Vue 組件的基礎(chǔ)浸卦,相信大部分同學(xué)耳聞能詳,所以此處就不舉例展開介紹案糙。

注意:props是單向數(shù)據(jù)流限嫌,既只能從父級(jí)傳到子級(jí),如果想要達(dá)到雙向时捌,子級(jí)能夠修改父級(jí)怒医,則需要給props加sync修飾符。(文章后部分有詳細(xì)介紹)

(2)ref$parent / $children適用 父子組件通信

ref:如果在普通的 DOM 元素上使用奢讨,引用指向的就是 DOM 元素稚叹;如果用在子組件上,引用就指向組件實(shí)例

$parent / $children:訪問父 / 子實(shí)例

(3)$attrs / $listeners適用于 隔代組件通信

$attrs:包含了父作用域中不被 prop 所識(shí)別 (且獲取) 的特性綁定 ( class 和 style 除外 )拿诸。

當(dāng)一個(gè)組件沒有聲明任何 prop 時(shí)扒袖,這里會(huì)包含所有父作用域的綁定 ( class 和 style 除外 ),并且可以通過 v-bind="$attrs" 傳入內(nèi)部組件亩码。通常配合 inheritAttrs 選項(xiàng)一起使用季率。

$listeners:包含了父作用域中的 (不含 .native 修飾器的) v-on 事件監(jiān)聽器。它可以通過 v-on="$listeners" 傳入內(nèi)部組件

(4)provide / inject適用于 隔代組件通信

祖先組件中通過 provider 來提供變量描沟,然后在子孫組件中通過 inject 來注入變量飒泻。provide / inject API 主要解決了跨級(jí)組件間的通信問題,不過它的使用場景吏廉,主要是子組件獲取上級(jí)組件的狀態(tài)泞遗,跨級(jí)組件間建立了一種主動(dòng)提供與依賴注入的關(guān)系。


(5)EventBus ($emit / $on)適用于 父子席覆、隔代史辙、兄弟組件通信

這種方法通過一個(gè)空的 Vue 實(shí)例作為中央事件總線(事件中心),用它來觸發(fā)事件和監(jiān)聽事件,從而實(shí)現(xiàn)任何組件間的通信髓霞,包括父子卦睹、隔代、兄弟組件方库。

(6)Vuex適用于 父子结序、隔代、兄弟組件通信

Vuex 是一個(gè)專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式纵潦。每一個(gè) Vuex 應(yīng)用的核心就是 store(倉庫)徐鹤。“store” 基本上就是一個(gè)容器邀层,它包含著你的應(yīng)用中大部分的狀態(tài) ( state )返敬。

Vuex 的狀態(tài)存儲(chǔ)是響應(yīng)式的。當(dāng) Vue 組件從 store 中讀取狀態(tài)的時(shí)候寥院,若 store 中的狀態(tài)發(fā)生變化劲赠,那么相應(yīng)的組件也會(huì)相應(yīng)地得到高效更新。

改變 store 中的狀態(tài)的唯一途徑就是顯式地提交 (commit) mutation秸谢。這樣使得我們可以方便地跟蹤每一個(gè)狀態(tài)的變化凛澎。

vuex的詳細(xì)使用方法:vuex管理狀態(tài)倉庫使用詳解

Vue 組件間通信是面試常考的知識(shí)點(diǎn)之一估蹄,這題有點(diǎn)類似于開放題塑煎,你知道的回答出越多方法越加分,表明你對(duì) Vue 掌握的越熟練臭蚁。

舉例props使用

a.vue 引用了一個(gè)detail組件

詳解eventBus通信方法

第一步:首先需要?jiǎng)?chuàng)建事件總線并將其導(dǎo)出最铁,以便其它模塊可以使用或者監(jiān)聽它。

兩個(gè)初始化事件中心的方法:

第二步:創(chuàng)建了 EventBus 垮兑,接下來你需要做到的就是在你的組件中加載它冷尉,并且調(diào)用同一個(gè)方法,就如你在父子組件中互相傳遞消息一樣系枪。

假設(shè)你有兩個(gè)Vue頁面需要通信: A 和 B 网严,A頁面 在按鈕上面綁定了點(diǎn)擊事件,發(fā)送一則消息嗤无,想通知 B頁面。

接下來怜庸,我們需要在 B頁面 中接收這則消息当犯。


同理我們也可以在 B頁面 向 A頁面 發(fā)送消息。這里主要用到的兩個(gè)方法:

如果使用不善割疾,EventBus會(huì)是一種災(zāi)難嚎卫,到底是什么樣的“災(zāi)難”了?大家都知道vue是單頁應(yīng)用,如果你在某一個(gè)頁面刷新了之后拓诸,與之相關(guān)的EventBus會(huì)被移除侵佃,這樣就導(dǎo)致業(yè)務(wù)走不下去。還要就是如果業(yè)務(wù)有反復(fù)操作的頁面奠支,EventBus在監(jiān)聽的時(shí)候就會(huì)觸發(fā)很多次馋辈,也是一個(gè)非常大的隱患。這時(shí)候我們就需要好好處理EventBus在項(xiàng)目中的關(guān)系倍谜。通常會(huì)用到迈螟,在vue頁面銷毀時(shí),同時(shí)移除EventBus事件監(jiān)聽尔崔。

如果想移除事件的監(jiān)聽答毫,可以像下面這樣操作:

$on事件是不會(huì)自動(dòng)清楚銷毀的,需要我們手動(dòng)來銷毀季春,否則在b組件每次加載一次就會(huì)創(chuàng)建一個(gè)監(jiān)聽洗搂,會(huì)重復(fù)監(jiān)聽到數(shù)據(jù)。

可以使用EventBus.$off('aMsg')來移除應(yīng)用內(nèi)所有對(duì)此某個(gè)事件的監(jiān)聽载弄。

或者直接調(diào)用EventBus.$off()來移除所有事件頻道耘拇,不需要添加任何參數(shù) 。

總結(jié): 所以侦锯,如果想要用bus 來進(jìn)行頁面組件之間的數(shù)據(jù)傳遞驼鞭,需要注意兩點(diǎn),組件A$emit事件應(yīng)在beforeDestory生命周期內(nèi)尺碰。其次挣棕,組件B內(nèi)的$on記得要銷毀。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末亲桥,一起剝皮案震驚了整個(gè)濱河市洛心,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌题篷,老刑警劉巖词身,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異番枚,居然都是意外死亡法严,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門葫笼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來深啤,“玉大人,你說我怎么就攤上這事路星∷萁郑” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長呈昔。 經(jīng)常有香客問我挥等,道長,這世上最難降的妖魔是什么堤尾? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任肝劲,我火速辦了婚禮,結(jié)果婚禮上哀峻,老公的妹妹穿的比我還像新娘涡相。我一直安慰自己,他們只是感情好剩蟀,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布催蝗。 她就那樣靜靜地躺著,像睡著了一般育特。 火紅的嫁衣襯著肌膚如雪丙号。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天缰冤,我揣著相機(jī)與錄音犬缨,去河邊找鬼。 笑死棉浸,一個(gè)胖子當(dāng)著我的面吹牛怀薛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播迷郑,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼枝恋,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了嗡害?” 一聲冷哼從身側(cè)響起焚碌,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎霸妹,沒想到半個(gè)月后十电,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡叹螟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年鹃骂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罢绽。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡偎漫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出有缆,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布棚壁,位于F島的核電站杯矩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏袖外。R本人自食惡果不足惜史隆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望曼验。 院中可真熱鬧泌射,春花似錦、人聲如沸鬓照。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽豺裆。三九已至拒秘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間臭猜,已是汗流浹背躺酒。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蔑歌,地道東北人羹应。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像次屠,于是被迫代替她去往敵國和親园匹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容