通信本质上是信息的同步,Vue的组件通信,就是Vue组件间的信息共享与同步。Vue的组件通信主要分为3类
这里说明下父子,兄弟,隔代组件定义
<div class="home">
<!--
1. father 与 son 就是父子组件关系
2. son 与 brother 就是兄弟组件关系
3. father 与 grandSon 就是隔代组件关系
-->
<father>
父组件
<son>
子组件
<grandSon>孙组件</grandSon>
</son>
<brother>兄弟组件</brother>
</father>
</div>
主要有以下几种
父组件通过props向子组件传递数据,子组件通过$emit与父组件通信。
//子组件
<template>
<div>
{{name}}
<button @click="connectFather">向父组件发送数据</button>
<slot></slot>
</div>
</template>
<script>
export default {
// 子组件通过props接收父组件数据
props: {
name: {
type: String,
},
},
methods: {
connectFather() {
// 子组件向父组件发送信息
this.$emit('onReceiveData','the message from son')
}
},
}
</script>
//父组件
<template>
<div>
//父组件接收来自子组件的通信
<son name="fromFather" @onReceiveData="getData"></son>
{{message}}
</div>
</template>
<script>
export default {
data() {
return {
message: ''
}
},
methods: {
getData(data) {
this.message = data;
},
},
components: {
son: () => import('@/views/communicate/Son.vue'),
},
};
</script>
父组件通过$children访问子组件实例,返回的是一个数组,因为可能有多个子实例,子组件通过$parent访问父组件实例,返回的是一个对象。另外需要注意的是Vue3已经移除了$children。$children与$parent设计的主要目的是作为访问组件的应急办法。