一、 父子组件通信
- 父组件向子组件传递参数
父组件使用v-bind动态绑定props值,子组件props选项声明从父组件接收的数据
//父组件
<set-components :title="xxx" />
props接参方式:
(1) props数组接收多个父组件传递的参数
//子组件
porps:['title','size','color']
(2)props对象接收多个父组件传递的参数,可以设置数据验证
//子组件
props:{
propsA:Number, //必须是数字型
propsB:[Number,String], //必须是数字型或字符型
propsC:{ //必须是布尔型,默认值为true
type:Boolean,
default:true
},
propsD:{ //必须是数字型,必传
type:Number,
required:true
},
propsE:{ //必须是数组型。当类型是数组或对象时,默认值必须通过函数返回
type:Array,
default:function(){
return [];
}
},
propsF:{ //自定义验证函数
validator:function(value){
return value>10
}
}
}
- 子组件向父组件传递参数
子组件触发自定义事件$emit(事件,参数)
$emit(event,...args)
父组件监听事件方式:
(1)通过v-on监听事件
<set-components @event='getchange' />
通过函数getchange形参接收子组件传递的参数
(2)$once监听事件
在父组件通过$once(event,callback)进行对$emit触发的事件进行监听。特点是触发后,清除$once监听方法,只会触发一次。
(3)$on监听事件
在父组件通过$on(event,callback)进行对$emit触发的事件进行监听。特点是触发后,不会清除$on监听方法,需要在想要清除$on监听方法时,手动清除$on方法,使用$off方法进行清除。需要$on和$off搭配使用。
$off(event,callback)
- 没有提供event,清除所有事件监听
- 提供event,清除event监听
- 提供event和callback,清除callback监听
- ref
通过$refs可以获取子组件的数据,只有组件渲染后填充$refs,不能做到响应式
$parent和$children
子组件通过$parent访问所有父组件
父组件通过$children访问所有子组件
二、兄弟组件通信
父级中使用两个兄弟组件,子组件a和子组件b,分别监听获取a和b传递到父组件的参数,然后将a的参数传递给b的props值,b的参数传递给a的props值。父组件起到了中间传递作用,实现了兄弟组件的通信
三、全局通信
- vuex进行全局管理和使用
- 通过bus全局vue,进行数据的全局通信
(1)定义全局bus变量vue实例对象。
bus=new vue()
(2)组件中通过bus进行$once,$on,$off,$emit的使用,通过自定义事件传参。
bus.$once
bus.$on
bus.$off
bus.$emit