組件通信

通信

父子通信

  • 父組件控制子組件 父組件控制自己的數(shù)據(jù)變化措嵌,將變化后的數(shù)據(jù)通過props自定屬性傳子組件.子組件會根據(jù)父組件數(shù)據(jù)的變化而做出相應(yīng)的變化

  • props (道具)自定義屬性 子組件間接受父組件傳遞過來的數(shù)據(jù)

    • /prɑps/
    1. 在子組件標(biāo)簽上使用自定屬性

    2. 在子組件內(nèi)部通過props來接受數(shù)據(jù)并命名

      1. props接受的可以是數(shù)組或?qū)ο?
        1. 區(qū)別就在于如果是對象的話可以檢查數(shù)據(jù)類型.
    3. 接受完了 既可以在組件里直接使用

      1. 使用時,使用的是props重新命名的名字.
      2. 只能用不能改
        <div id='app1'>  
          這里是實例
          {{money}}
          <hr>  
          <!-- 在tp1組件標(biāo)簽上使用 xixi自定義屬性 -->
          <tp1 :xixi='money'></tp1>
        </div> 
      
        <!-- 組件模板 -->
        <template id='tp1'>
          <div class='tp1'>
            這里是組件
            {{xixi}}
          </div>
        </template>
      <script>
      Vue.component('tp1',{
        template:'#tp1',
        data(){
          return{
            hehe:123
          }
        },
        props:{
          xixi:{type:Number} //傳值的同時檢查數(shù)據(jù)的類型
        }
        // props:['xixi'] //接收自定義屬性
      })
      
      let vm1 = new Vue({
        el:'#app1',
        data:{
          money:'資產(chǎn)'
        }
      })
      

子父通信

  • 子組件控制父組件的數(shù)據(jù) 父組件控制自己的數(shù)據(jù)變化痴柔,將控制函數(shù)通過emit自定義事件傳遞子組件 供子組件調(diào)用

  • $emit 可以觸發(fā)綁定在組件身上自定義事件

    1.在組件標(biāo)簽綁定一個自定義事件

    2.在組件的內(nèi)部 通過$emit 觸發(fā)這個自定事件

    在子組件里觸發(fā)父組件的方法

     <div id='app1'>  
      這里是實例
      <hr>
      <!-- 綁定在son身上的自定義事件 事件名叫 heeh 處理函數(shù)叫change -->
      <son @hehe='change'></son>
      </div> 
    <!-- 組件模板 -->
    
    <template id='tp1'>
      <div>
        這里是子組件
        <button @click='sonClick'> 這里是子組件的按鈕</button>
      </div>
    </template>
    
    <script>
    
    Vue.component('son',{
      template:'#tp1',
      methods: {
        sonClick(){
          // 通過emit方法觸發(fā)自定義事件 參數(shù)1 自定義事件名 參數(shù)2:可以傳參
          this.$emit('hehe',666)
          
        }
      },
    })
    
    let vm1 = new Vue({
      el:'#app1',
      methods: {
        change(num){
          alert('點到我了'+num)
        }
      },
    })
    

兄弟通信

  • 狀態(tài)提升

    • 把兩個組件需要的數(shù)據(jù)和方法都放到他們的父元素上,然后一個接受父元素的數(shù)據(jù),一個接受父元素的方法,就可以實現(xiàn).使用組件2的方法來控制組件1的數(shù)據(jù).

      <div id='app1'>  
          <!-- 將父親的數(shù)據(jù)通過自定義屬性傳給組件1使用 -->
          <son1 :show='state'></son1>
          <hr>  
           <!-- 將父親的方法通過自定義事件傳給組件2使用 -->
          <son2 @custom='faToggle'></son2>
        </div>
        <hr>
        <!-- 組件1 -->
        <template id='son1'>
          <div>
             這里是組件1
             <div class='test' v-show='show'>
      
             </div>
          </div>
        </template>
       <!-- 組件2 -->
       <template id='son2'>
        <div>
           這里是組件2
           <button @click='son2Click'>顯示隱藏</button>
        </div>
      </template>
      <script>
      /*
      組件1 和組件2 是兄弟
      組件1有div 可以顯示隱藏
      組件2 有butoon 控制顯示隱藏
      
      控制顯示隱藏的值放在公有的爸爸上
      */ 
      Vue.component('son1',{
        template:'#son1',
        props:['show']  //接受爸爸傳來的數(shù)據(jù)
      })
      Vue.component('son2',{
        template:'#son2',
        methods: {
          son2Click(){
            this.$emit('custom') //觸發(fā)爸爸傳來的函數(shù)
          }
        },
      })
      let vm1 = new Vue({
        el:'#app1',
        data:{
          state:false
        },
        methods: {
          faToggle(){
            this.state=!this.state
          }
        },
      })
      
  • 事件總線

    • 事件總線的原理 類似于 觀察者模式 事件拋發(fā)機制 也有叫天使實例的

      1. 創(chuàng)建一個空實例 作為橋梁

      2. 因為組件中.只有自己才能夠處理自己的數(shù)據(jù).所以給自己添加個虛擬的處理數(shù)據(jù)的事件

        1. 通過 $on 在把組件中的事件在空實例上注冊
      3. 在任何地方 只要能獲取到空實例 那就可以通過 $emit 方法觸發(fā)事件

    • 整個鏈條是son1的事件==空實例==son2中的事件

        <div id="app">
          <son1></son1>
          <hr>
          <son2></son2>  
        </div>
        <!-- 組價1的模板 -->
        <template lang="" id='son1'>
          <div>
            這里是組件1 
            <button @click ='change'>toggle</button>
          </div>
        </template>
        <!-- 組價2的模板 -->
        <template lang="" id='son2'>
        <div>
          這里是組件2 
          <div class="test" v-if='show'></div>
        </div>
      </template>
      <script>
      
      let vue = new Vue() //創(chuàng)建一個空實例 
      let son1 = Vue.component('son1',{
        template:'#son1',
        methods:{
          change(){
            console.log('空實例',vue)
            // 將son1的點擊事件和vue的hehe點擊事件綁定
            vue.$emit('hehe')
          }
        }
      })
      // 組件里的數(shù)據(jù)只有自己能改變.所以先給自己添加一個修改數(shù)據(jù)的點擊事件.
      let son2 = Vue.component('son2',{
        template:'#son2',
        data(){
          return{
            show:false
          }
        },
        methods: {
          toggle(){
            this.show=!this.show
          }
        },
        //將組件2的點擊事件注冊到vue上.
        mounted() {
          // 組件從虛擬dom變成真實dom 的時刻會自動執(zhí)行的函數(shù)
          console.log('組件二掛載')
          vue.$on('hehe',this.toggle)
          // 將toggle方法注冊到 vue空實例的上 名字叫hehe
        },
      })
      let vm=new Vue({
        el:"#app"
      })
      
  • 全局狀態(tài)管理
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子臀脏,更是在濱河造成了極大的恐慌怀大,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件因俐,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機抹剩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門撑帖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人澳眷,你說我怎么就攤上這事胡嘿。” “怎么了境蔼?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵灶平,是天一觀的道長。 經(jīng)常有香客問我箍土,道長逢享,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任吴藻,我火速辦了婚禮瞒爬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘沟堡。我一直安慰自己侧但,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布航罗。 她就那樣靜靜地躺著禀横,像睡著了一般。 火紅的嫁衣襯著肌膚如雪粥血。 梳的紋絲不亂的頭發(fā)上柏锄,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音复亏,去河邊找鬼趾娃。 笑死,一個胖子當(dāng)著我的面吹牛缔御,可吹牛的內(nèi)容都是我干的抬闷。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼耕突,長吁一口氣:“原來是場噩夢啊……” “哼笤成!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起眷茁,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤疹启,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蔼卡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喊崖,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡挣磨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了荤懂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茁裙。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖节仿,靈堂內(nèi)的尸體忽然破棺而出晤锥,到底是詐尸還是另有隱情,我是刑警寧澤廊宪,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布矾瘾,位于F島的核電站,受9級特大地震影響箭启,放射性物質(zhì)發(fā)生泄漏壕翩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一傅寡、第九天 我趴在偏房一處隱蔽的房頂上張望放妈。 院中可真熱鬧,春花似錦荐操、人聲如沸芜抒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宅倒。三九已至,卻和暖如春屯耸,著一層夾襖步出監(jiān)牢的瞬間唉堪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工肩民, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人链方。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓持痰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親祟蚀。 傳聞我的和親對象是個殘疾皇子工窍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

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

  • 對于vue來說,組件之間的消息傳遞是非常重要的前酿,下面是我對組件之間消息傳遞的各種方式的總結(jié)患雏,總共有8種方式。 1....
    edc余悸閱讀 350評論 0 3
  • 能工摹形罢维,巧匠竊意淹仑。必三省吾身,萬不可怠惰因循。 foreword 這篇容納了我個人所知道的一些Vue 2.x組件...
    禾小沐的技術(shù)與生活閱讀 368評論 0 1
  • 父子組件通信 1、父子組件通過prop傳遞數(shù)據(jù) 父組件可以將一條數(shù)據(jù)傳遞給子組件匀借,這條數(shù)據(jù)可以是動態(tài)的颜阐,父組件的數(shù)...
    視覺派Pie閱讀 1,255評論 0 18
  • 原文:https://segmentfault.com/a/1190000018241972 組件的分類 常規(guī)頁面...
    勿忘巛心安閱讀 344評論 0 0
  • vue是數(shù)據(jù)驅(qū)動視圖更新的框架, 所以對于vue來說組件間的數(shù)據(jù)通信非常重要,那么組件之間如何進(jìn)行數(shù)據(jù)通信的呢吓肋?首...
    咿呀咿呀_b53d閱讀 1,271評論 0 18