Vue組件通信

最近在學(xué)習(xí)Vue,組件化后不同組件之間如何通信部逮,記錄一下娜汁。

  • Vue中組件通信時(shí),數(shù)據(jù)流只能由父級(jí)傳遞給子級(jí)兄朋,通過props掐禁,子級(jí)傳遞信息給父級(jí),通過$emit颅和。
  • 只有父子間能直接通信傅事,兄弟(同級(jí))之間,爺孫(隔代)之間都不能直接傳遞信息峡扩,只能利用父子通信來傳遞蹭越。

父子組件

子組件接受父組件的數(shù)據(jù)時(shí),通過定義props來實(shí)現(xiàn)教届。子組件對(duì)父組件傳遞信息時(shí)响鹃,通過事件來傳遞。如下面的示例

http://js.jirengu.com/zuzikasoxe/2/edit

  <div id="app">
    <child :title="message" @click-child="message2 += $event "></child>
    {{message2}}
  </div>

Vue.component('child',{
  props:['title'],
  data(){
    return{
      msg: '+child發(fā)出的數(shù)據(jù)',
    }
  },
  template:`<div>
      <hr><div>
      {{title}}<button @click="$emit('click-child',msg)">child</button>
      <hr>
  </div>
  `
})
let app = new Vue({
  el: "#app",
  data: {
    message: '父組件的一個(gè)數(shù)據(jù)',
    message2: 'Hello',
  },
})
父子組件通信

子組件中通過props中的title案训,綁定了父組件中的message买置,實(shí)現(xiàn)了數(shù)據(jù)傳遞。而通過$emit()將點(diǎn)擊事件通知了父組件强霎,實(shí)現(xiàn)了父子之間的通信忿项。

爺孫通信

爺爺和孫子是不能直接通信的,只能通過爺爺傳給兒子,兒子傳給孫子倦卖。孫子傳給兒子洒擦,兒子傳給爺爺這樣進(jìn)行通信。

http://js.jirengu.com/jaquhoseqo/3/edit

  <div id="app">
    {{message2}}
    <child :title="message" @click-add="message2 += $event" @click-grand-add="message2 += $event"></child>
  </div>
Vue.component('child', {
  props: ['title'],
  data() {
    return {
      msg: '+child發(fā)出的數(shù)據(jù)',
    }
  },
  template: `
  <div>
      <hr>
      {{title}}
      <button @click="$emit('click-add',msg)">child++</button>
      <grand-son :tit="title" @click-grand-add="$emit('click-grand-add',$event)"></grand-son>
  </div>
  `
})

Vue.component('grand-son', {
  props: ['tit'],
  data() {
    return {
      msg: '+grandSon發(fā)出的數(shù)據(jù)',
    }
  },
  template: `
  <div>
    <hr>
    {{tit}}
    <button @click="$emit('click-grand-add',msg)">grandSon++</button>
  </div>
  `
})

let app = new Vue({
  el: "#app",
  data: {
    message: '父組件的一個(gè)數(shù)據(jù)',
    message2: 'Hello',
  },
})
爺孫組件的通信.png

兒子通過props得到爺爺?shù)臄?shù)據(jù)怕膛,孫子再通過props得到兒子的數(shù)據(jù)熟嫩,進(jìn)而得到爺爺?shù)臄?shù)據(jù)。孫子發(fā)出數(shù)據(jù)時(shí)褐捻,$emit首先通知到兒子掸茅,再通知到爺爺,最后爺爺進(jìn)行相應(yīng)操作柠逞。

兄弟(同級(jí))組件間通信

定義一個(gè)公共的vue實(shí)例昧狮,一個(gè)組件傳遞數(shù)據(jù)時(shí),向這個(gè)實(shí)例發(fā)送$emit通知板壮,另一個(gè)組建用這個(gè)實(shí)例監(jiān)聽事件逗鸣,進(jìn)行相應(yīng)的操作。

https://jsfiddle.net/50wL7mdz/527445/

<script src="https://unpkg.com/vue"></script>

<div id="app">
  {{message}}
  <child></child>
  <child2></child2>
</div>
let bus = new Vue()

Vue.component('child', {
  props: ['title'],
  template: `
  <div>
      <hr>這里是child1
      <button @click="fn">關(guān)閉button2</button>
  </div>
  `,
  methods: {
    fn(){
        bus.$emit('click-child','child1想關(guān)閉child2')
    }
  }
})

Vue.component('child2', {
  props: ['title'],
  data() {
    return {
      msg: '這里是child2',
    }
  },
  created: function() {
    bus.$on('click-child',this.fn)
  },
  methods: {
    fn(value){
        this.msg += value
    }
  },
  template: `
  <div>
      <hr>{{msg}}
      <button>button2</button>
  </div>
  `
})

let app = new Vue({
  el: "#app",
  data: {
    message: 'Hello',
  },
})
兄弟組件通信

這段代碼中bus就是一個(gè)公共的容器绰精,使同級(jí)的兄弟組件中進(jìn)行通信撒璧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市笨使,隨后出現(xiàn)的幾起案子卿樱,更是在濱河造成了極大的恐慌,老刑警劉巖硫椰,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件繁调,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡靶草,警方通過查閱死者的電腦和手機(jī)蹄胰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爱致,“玉大人烤送,你說我怎么就攤上這事】访酰” “怎么了帮坚?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)互艾。 經(jīng)常有香客問我试和,道長(zhǎng),這世上最難降的妖魔是什么纫普? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任阅悍,我火速辦了婚禮好渠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘节视。我一直安慰自己拳锚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布寻行。 她就那樣靜靜地躺著霍掺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拌蜘。 梳的紋絲不亂的頭發(fā)上杆烁,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天,我揣著相機(jī)與錄音简卧,去河邊找鬼兔魂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛举娩,可吹牛的內(nèi)容都是我干的析校。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼晓铆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼勺良!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起骄噪,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蠢箩,沒想到半個(gè)月后链蕊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谬泌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年滔韵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掌实。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡陪蜻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贱鼻,到底是詐尸還是另有隱情宴卖,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布邻悬,位于F島的核電站症昏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏父丰。R本人自食惡果不足惜肝谭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧攘烛,春花似錦魏滚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至靖秩,卻和暖如春须眷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沟突。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工花颗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人惠拭。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓扩劝,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親职辅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子棒呛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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

  • 子組件=》父組件 vue的組件之間的通信類似angular的父子層級(jí)之間通信,父組件獲取子組件數(shù)據(jù)步驟大概如下: ...
    羊烊羴閱讀 339評(píng)論 0 3
  • Vue組件通信 Vue組件關(guān)系可分為三大類: 父子組件 兄弟組件 跨級(jí)組件, 相應(yīng)的組件之間的通信也分類三大類: ...
    dino小恐龍閱讀 1,908評(píng)論 0 2
  • 參考自vue.js 官方文檔 如果你使用 Vue 進(jìn)行開發(fā)的話域携,你不得不了解的一項(xiàng)就是 Vue 的組件(Compo...
    壽木閱讀 371評(píng)論 0 2
  • 組件通信各種情況總結(jié)VUE是以數(shù)據(jù)驅(qū)動(dòng)的MVVM框架簇秒,又是模塊化開發(fā),所以各個(gè)組件間的通信傳遞數(shù)據(jù)非常重要秀鞭,在項(xiàng)目...
    流年_338f閱讀 578評(píng)論 0 2
  • 父組件傳遞數(shù)據(jù)給子組件 父組件數(shù)據(jù)如何傳遞給子組件呢趋观?可以通過props屬性來實(shí)現(xiàn)父組件://這里必須要用 - 代...
    via_98cc閱讀 134評(píng)論 1 0