vue 父傳子,子傳父记罚,兄弟組件之間的傳遞方式

在小型項目當中墅诡,如果不考慮VueX,組件之間的通信該如何處理桐智,接下來我們創(chuàng)建parents childA childB 三個組件演示如何傳遞與接收

parents組件:

<template>
  <div>
    <childA/>
    <childB/>
  </div>
</template>

<script>
export default {
  components: {
    childA: () => import('@/components/childA'),
    childB: () => import('@/components/childB'),
  },
}
</script>

childA組件:

<template>
  <div>
    <h2>Hello,我是ChildA組件</h2>
  </div>
</template>

<script>
export default {

}
</script>

childB組件:

<template>
  <div>
    <h2>Hello,我是ChildB組件</h2>
  </div>
</template>

<script>
export default {

}
</script>

運行效果如下


image.png

1.父組件傳遞子組件末早,子組件接收父組件

這里我想
parents組件給ChildA組件傳一個Hi , ChildA! 我是你爸爸! ,
parents組件給ChildB組件傳一個Hi , ChildB! 我也是你爸爸!
那么該怎么處理?這里子組件在父組件中作為標簽引入说庭,通過設置標簽的屬性傳遞數據然磷,在子組件用props接收
注這里的props可接收類型

props: {
  title: String,
  likes: Number,
  isPublished: Boolean,
  commentIds: Array,
  author: Object,
  callback: Function,
  contactsPromise: Promise // or any other constructor
}

這里我們設置一個標簽屬性message

parents組件:

<template>
  <div>
    <childA :message="toChildA"/>
    <childB :message="toChildB"/>
  </div>
</template>

<script>
export default {
  components: {
    childA: () => import('@/components/childA'),
    childB: () => import('@/components/childB'),
  },
  data(){
      return{
          toChildA:'Hi , ChildA! 我是你爸爸!',
          toChildB:'Hi , ChildB! 我也是你爸爸!',
      }
  }
}
</script>


childA組件:

<template>
  <div>
    <h2>Hello,我是ChildA組件</h2>
    <div>來自parents組件的信息:{{message}}</div>
  </div>
</template>

<script>
export default {
    props:{
        message:String
    }
}
</script>

childB組件:

<template>
  <div>
    <h2>Hello,我是ChildB組件</h2>
    <div>來自parents組件的信息:{{message}}</div>
  </div>
</template>

<script>
  export default {
    props:{
      message:String
    }
  }
</script>

運行效果如下


image.png

2.子組件傳遞父組件,父組件接收子組件

子組件通過$emit觸發(fā)事件刊驴,父組件通過v-on接收觸發(fā)事件

通俗的來說 childA組件: $emit('A觸發(fā)的事件名稱') 那么相應的 parents組件 就需要接收同樣的事件
<childA @A觸發(fā)的事件名稱="parents組件用于接收的方法" />

parents組件:

<template>
  <div>
    <childA @from_child_a="receiveChildA" :message="toChildA"/>
    <i>這是ChildA發(fā)過來的消息 : {{childAMsg}}</i>
    <childB @from_child_b="receiveChildB" :message="toChildB"/>
    <i>這是ChildB發(fā)過來的消息 : {{childBMsg}}</i>
  </div>
</template>

<script>
export default {
  components: {
    childA: () => import('@/components/childA'),
    childB: () => import('@/components/childB'),
  },
  data(){
      return{
        toChildA:'Hi , ChildA! 我是你爸爸!',
        toChildB:'Hi , ChildB! 我也是你爸爸!',
        childAMsg:'',
        childBMsg:''
      }
  },
  methods:{
    receiveChildA(pramas){
      this.childAMsg = pramas
    },
    receiveChildB(pramas){
      this.childBMsg = pramas
    }
  }
}
</script>

childA組件:

<template>
  <div>
    <h2>Hello,我是ChildA組件</h2>
    <div>來自parents組件的信息:{{message}}</div>
  </div>
</template>

<script>
export default {
    props:{
        message:String
    },
    mounted(){
      this.$emit('from_child_a','Hi,爸爸 , 我是ChildA')
    }
}
</script>

childB組件:

<template>
  <div>
    <h2>Hello,我是ChildB組件</h2>
    <div>來自parents組件的信息:{{message}}</div>
  </div>
</template>

<script>
  export default {
    props:{
      message:String
    },
    mounted(){
      this.$emit('from_child_b','Hi,爸爸 , 我是ChildB')
    }
  }
</script>

運行效果如下


image.png

3.平行兄弟組件之間的數據傳遞

上面我們講了子傳父刃滓,父傳子悼瘾,子接收父移斩,父接收子劳秋,那么平行的兩個組件之間我們該怎么通信呢?這里引入一個概念‘總線’攻礼,你可以把它理解為全局的window业踢,但是又不同于window,它的作用就好像十字路口礁扮,就是我不管你什么方向的車知举,你都可以從我這里過,而我既可以接受你的信號太伊,我也能把你的信號傳遞給別人雇锡。

具體怎么實現的?

這里我們新建一個bus.js ,新建一個Vue對象并且掛載注入到vue對象里僚焦,在main.js引用

import Vue from 'vue'

export const Bus = new Vue()

export default Vue => {
  const bus = Bus;
  Vue.bus = bus;
  Vue.prototype.$bus = bus
}

main.js引入使用,這樣全局就注冊了一個bus總線
注意:注冊的總線事件要在組件銷毀時卸載锰提,否則會多次掛載,造成觸發(fā)一次但多個響應的情況

import Bus from './utils/bus'
Vue.use(Bus)

ChildA組件

<template>
  <div>
    <h2>Hello,我是ChildA組件</h2>
    <div>來自parents組件的信息:{{message}}</div>
    <button @click="sendMsgToB">我要給ChildB發(fā)送信息</button>
  </div>
</template>

<script>
export default {
    props:{
        message:String
    },
    mounted(){
      this.sendToParent()
    },
    methods:{
      sendToParent(){
        this.$emit('from_child_a','Hi,爸爸 , 我是ChildA');
      },
      sendMsgToB(){
        this.$bus.$emit('from_bro_child_a','Hi,兄弟芳悲,我是ChildA'+Math.random())
      }
    },
    beforeDestroy () {
      this.$bus.$off('from_bro_child_a')
    }
}
</script>

ChildB組件

<template>
  <div>
    <h2>Hello,我是ChildB組件</h2>
    <div>來自parents組件的信息:{{message}}</div>
    <div style="color: red">來自兄弟ChildA組件的信息:{{fromBroChildAMsg}}</div>
  </div>
</template>

<script>
  export default {
    props:{
      message:String
    },
    data(){
      return{
        fromBroChildAMsg:null
      }
    },
    mounted(){
      this.sendToParent()
      this.watchBus()
    },
    methods:{
      sendToParent(){
        this.$emit('from_child_b','Hi,爸爸 , 我是ChildB');
      },
      watchBus(){
        let that = this;
        this.$bus.$on('from_bro_child_a', (pramas) => {
          that.fromBroChildAMsg= pramas
        })
      }
    }
  }
</script>

運行效果如下


image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末立肘,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子名扛,更是在濱河造成了極大的恐慌谅年,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肮韧,死亡現場離奇詭異融蹂,居然都是意外死亡旺订,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門超燃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來区拳,“玉大人,你說我怎么就攤上這事淋纲±湍郑” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵洽瞬,是天一觀的道長。 經常有香客問我业汰,道長伙窃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任样漆,我火速辦了婚禮为障,結果婚禮上,老公的妹妹穿的比我還像新娘放祟。我一直安慰自己鳍怨,他們只是感情好,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布跪妥。 她就那樣靜靜地躺著鞋喇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪眉撵。 梳的紋絲不亂的頭發(fā)上侦香,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天,我揣著相機與錄音纽疟,去河邊找鬼罐韩。 笑死,一個胖子當著我的面吹牛污朽,可吹牛的內容都是我干的散吵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼蟆肆,長吁一口氣:“原來是場噩夢啊……” “哼矾睦!你這毒婦竟也來了?” 一聲冷哼從身側響起颓芭,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤顷锰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后亡问,有當地人在樹林里發(fā)現了一具尸體官紫,經...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡肛宋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了束世。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酝陈。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖毁涉,靈堂內的尸體忽然破棺而出沉帮,到底是詐尸還是另有隱情,我是刑警寧澤贫堰,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布穆壕,位于F島的核電站,受9級特大地震影響其屏,放射性物質發(fā)生泄漏喇勋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一偎行、第九天 我趴在偏房一處隱蔽的房頂上張望川背。 院中可真熱鬧,春花似錦蛤袒、人聲如沸熄云。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缴允。三九已至,卻和暖如春隐孽,著一層夾襖步出監(jiān)牢的瞬間癌椿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工菱阵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留踢俄,地道東北人。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓晴及,卻偏偏與公主長得像都办,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子虑稼,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內容