vue-bus 事件總線(xiàn)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <style>
    .app {
      display: flex;
    }
    .app div {
      flex: 1;
    }
  </style>
</head>
<body>

  <div id='app' class='app'>
    <div>
      <child-a></child-a>
    </div>
    <div>
      <child-b></child-b>
    </div>
  </div>


  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script>

    // 事件總線(xiàn),通過(guò)“訂閱-發(fā)布”模式實(shí)現(xiàn)組件之間的直接通信
    1.首先創(chuàng)建一個(gè)空的vue實(shí)例
    var bus = new Vue() 
    它身上有兩個(gè)方法實(shí)現(xiàn)組件之間的通信纤怒,bus.$emit(頻道档泽,數(shù)據(jù))定義 在組件的methods中悦析,用來(lái)向其他組件發(fā)送消息乓搬,bus.$on(頻道,數(shù)據(jù))用來(lái)接收其他組件發(fā)來(lái)的消息幔欧,定義在生命周期的created或者mounted鉤子函數(shù)中。
    // bus.$emit('頻道')  發(fā)送消息
    // bus.$on('頻道')    收到消息
當(dāng)兩個(gè)組件發(fā)送數(shù)據(jù)的頻道和接收消息的頻道相同就可以實(shí)現(xiàn)組件之間的雙向通信了
    Vue.component('child-a', {
      data: function() {
        return {
          msg: '',
          html: ''
        }
      },
      template:`
      <div>
        <input type="text" v-model='msg' @keyup.enter='send'>
        <button @click='send'>發(fā)送</button>
      //給輸入框和button按鈕都綁定send事件干厚,當(dāng)監(jiān)聽(tīng)到鍵盤(pán)enter事件或按鈕點(diǎn)擊事件李滴,執(zhí)行事件函數(shù)send
        <div v-html='html'></div>
      </div>
      `,
      methods: {
        send() {
          // 發(fā)送消息
          bus.$emit('A', this.msg)
子組件a廣播了一件非定向消息,消息內(nèi)容為msg,msg就是輸入框中的內(nèi)容蛮瞄。廣播頻道為A所坯,
子組件b要接收這條消息,就要監(jiān)聽(tīng)廣播頻道A
          this.msg = ''
        }
      },
      created() {
        var that = this
普通函數(shù)會(huì)改變this指向
        bus.$on('B', function(msg) {
子組件a監(jiān)聽(tīng)頻道B的消息挂捅,并執(zhí)行回調(diào)函數(shù)芹助,將消息內(nèi)容渲染到div中
          that.html += '<div>B說(shuō):'+msg+'</div>'
that指向組件實(shí)例,可以調(diào)用組件上的屬性和方法
        })
      }
    })

    Vue.component('child-b', {
      data: function() {
        return {
          msg: '',
          html: ''
        }
      },
      template:`
      <div>
        <input type="text" v-model='msg' @keyup.enter='send'>
        <button @click='send'>發(fā)送</button>
        <div v-html='html'></div>
      </div>
      `,
      methods: {
        send() {
          bus.$emit('B', this.msg)

          this.msg = ''
        }
      },
      created() {
        var that = this
        bus.$on('A', function(msg) {
            //監(jiān)聽(tīng)的頻道,收到消息后的回調(diào)函數(shù)
          that.html += '<div>A說(shuō):'+msg+'</div>'
        })
      }
    })

    var app = new Vue({
      el: '#app'
    })
  </script>

</body>
</html>
效果實(shí)例

HTML結(jié)構(gòu)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末状土,一起剝皮案震驚了整個(gè)濱河市无蜂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蒙谓,老刑警劉巖斥季,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異累驮,居然都是意外死亡酣倾,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)谤专,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)躁锡,“玉大人,你說(shuō)我怎么就攤上這事毒租≈上常” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵墅垮,是天一觀(guān)的道長(zhǎng)惕医。 經(jīng)常有香客問(wèn)我,道長(zhǎng)算色,這世上最難降的妖魔是什么抬伺? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮灾梦,結(jié)果婚禮上峡钓,老公的妹妹穿的比我還像新娘。我一直安慰自己若河,他們只是感情好能岩,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著萧福,像睡著了一般拉鹃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鲫忍,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天膏燕,我揣著相機(jī)與錄音,去河邊找鬼悟民。 笑死坝辫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的射亏。 我是一名探鬼主播近忙,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼竭业,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了银锻?” 一聲冷哼從身側(cè)響起永品,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎击纬,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體钾麸,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡更振,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了饭尝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肯腕。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖钥平,靈堂內(nèi)的尸體忽然破棺而出实撒,到底是詐尸還是另有隱情,我是刑警寧澤涉瘾,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布知态,位于F島的核電站,受9級(jí)特大地震影響立叛,放射性物質(zhì)發(fā)生泄漏负敏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一秘蛇、第九天 我趴在偏房一處隱蔽的房頂上張望其做。 院中可真熱鬧,春花似錦赁还、人聲如沸妖泄。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蹈胡。三九已至,卻和暖如春柬焕,著一層夾襖步出監(jiān)牢的瞬間审残,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工斑举, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留搅轿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓富玷,卻偏偏與公主長(zhǎng)得像璧坟,于是被迫代替她去往敵國(guó)和親既穆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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