- 父組件通知子組件
父組件向子組件傳遞數(shù)據(jù)可以通過props
props 可以是數(shù)組或?qū)ο蠛炕ǎ糜诮邮諄碜愿附M件的數(shù)據(jù)舷礼。props 可以是簡單的數(shù)組耸弄,或者使用對象作為替代,對象允許配置高級選項闺属,如類型檢測、自定義校驗和設(shè)置默認(rèn)值
<template>
<div class="index">
<!-- 父組件 -->
<IndexHead v-bind:banner-info="bannerList"></IndexHead>
</div>
</template>
<template>
<div class="indexhead">
<!-- 子組件 -->
<div v-if="bannerInfo" v-for="banner in bannerInfo" >
</div>
</div>
</template>
<script>
export default {
name: 'IndexHead',
props:['bannerInfo'],
data () {
return {
myswiper:''"
}
}
}
</script>
- 子組件通知父組件
簡單來說通過$emit觸發(fā)實例的事件周霉,將數(shù)據(jù)傳給監(jiān)聽器回調(diào)
<!-- 父組件 -->
<template>
<component-a v-on:child-say="listenMe"></component-a>
<p>Do you like me? {{childWords}}</p>
</template>
methods: {
listenMe: function (somedata){
this.childWords = somedata
}
}
<!-- 子組件 -->
<button v-on:click="onClickMe">like!</button>
methods: {
onClickMe: function(){
this.$emit('child-say',this.somedata);
}
}
- 非父子組件通信
在vue官網(wǎng)上介紹了非父子組件通信的方法 掂器,用過bus來承載數(shù)據(jù)
在簡單的場景下可以使用一個空的vue實例作為中央事件總線
中央事件總線
// 根組件(this.$root)
new Vue({
el: '#app',
router,
render: h => h(App),
data: {
// 空的實例放到根組件下,所有的子組件都能調(diào)用
Bus: new Vue()
}
})
以下兩個組件為兄弟組件俱箱,
<button @click="submit">提交<button>
methods: {
submit() {
// 事件名字自定義国瓮,用不同的名字區(qū)別事件
this.$root.Bus.$emit('eventName', 123)
}
}
// 當(dāng)前實例創(chuàng)建完成就監(jiān)聽這個事件
created(){
this.$root.Bus.$on('eventName', value => {
this.print(value)
})
},
methods: {
print(value) {
console.log(value)
}
},
// 在組件銷毀時別忘了解除事件綁定
beforeDestroy() {
this.$root.Bus.$off('eventName')
}