组件之间的关系
在项目开发中,组件之间的最常见的关系分为如下两种:
- 父子关系
- 兄弟关系
父子组件之间的数据共享
父子组件之间的数据共享又分为:
- 父 -> 子共享数据
- 子 -> 父共享数据
父组件向子组件共享数据
父组件向子组件共享数据需要使用自定义属性,示例代码如下:
// 父组件
<template>
<Son :msg="message" :user="userinfo"></Son>
</template>
<script>
data() {
return {
message: 'hello vue.js',
userinfo: { name: 'zs', age: 20 }
}
}
</script>
// 子组件
<template>
<div>
<h5>Son 组件</h5>
<p>父组件传递过来的 msg 值是: {{ msg }}</p>
<p>父组件传递过来的 user 值是: {{ user }}</p>
</div>
</template>
<script>
export default {
props: ['msg','user']
}
</script>
子组件向父组件共享数据
子组件向父组件共享数据使用自定义事件,示例代码如下:
// 子组件
export default {
data() {
return {
// 子组件自己的数据 希望把 count 值传给父组件
count: 0
}
},
methods: {
add() {
this.count += 1
// 修改数据是 通过 $emit() 触发自定义事件
this.$emit('numchange', this.count)
}
}
}
// 父组件
<template>
<Son @numchange="getNewCount"></Son>
</template>
<script>
export default {
data() {
return {
countFronSon: 0
}
},
methods: {
getNewCount(val) {
this.countFronSon = val
}
}
}
</script>
兄弟组件之间的数据共享
在 vue2.x 中,兄弟组件之间数据共享的方案是 EventBus
EventBus的使用步骤
- 创建 eventBus.js 模块,并向外共享一个 Vue 的实例对象
- 在数据发送方,调用 bus.$emit('事件名称', 要发送的数据) 方法触发自定义事件
- 在数据接收方,在 created() 阶段方法中调用 bus.$on('事件名称', 事件处理函数) 方法注册一个自定义事件