Vue2最常见的11种组件间的通讯方式
props$emit / v-on.syncv-modelref$children / $parent$attrs / $listenersprovide / injectEventBusVuex$rootslot
props
父组件向子组件传送数据,这应该是最常用的方式了,
子组件接收到数据之后,不能直接修改父组件的数据。
否则会报错,因为当父组件重新渲染时,数据会被覆盖。如果只在子组件内要修改的话推荐使用 computed
// Parent.vue 传送
<template>
<child :msg="msg"></child>
</template>
// Child.vue 接收
export default {
// 写法一 用数组接收
props:['msg'],
// 写法二 用对象接收,可以限定接收的数据类型、设置默认值、验证等
props:{
msg:{
type:String,
default:'这是默认数据'
}
},
mounted(){
console.log(this.msg)
},
}
.sync 子组件可以修改父组件内容
.sync可以帮我们实现父组件向子组件传递的数据的双向绑定,所以子组件接收到数据后可以直接修改,并且会同时修改父组件的数据
// Parent.vue
<template>
<child :page.sync="page"></child>
</template>
<script>
export default {
data(){
return {
page:1
}
}
}
// Child.vue
export default {
props:["page"],
computed(){
// 当我们在子组件里修改 currentPage 时,父组件的 page 也会随之改变
currentPage {
get(){
return this.page
},
set(newVal){
this.$emit("update:page", newVal)
}
}
}
}
</script>
v-model
和 .sync 类似,可以实现将父组件传给子组件的数据为双向绑定,子组件通过 $emit 修改父组件的数据

本文详细介绍了Vue2中组件之间的11种通讯方式,包括props、.sync修饰符、v-model、ref、EventBus、Vuex以及slot插槽等。重点讨论了如何在不同场景下选择合适的方法进行数据传递,如props用于父向子单向数据流,.sync和v-model实现双向绑定,ref用于访问子组件实例,EventBus和Vuex则适用于更复杂的跨组件通信。
最低0.47元/天 解锁文章
9911

被折叠的 条评论
为什么被折叠?



