Vue中涉及到的组件通信无非如下几种
- 父子,子父
- 跨级(祖孙)
- 兄弟通信
通信方式总结如下
- 简单粗暴的
$ref,$parent,$children拿到组件实例来获取组件实例来进行通信 - 基于发布订阅的
$on$emit,子组件触发事件,父组件监听 - vue2.2 提供的api
injectprovide - vue1.x提供的
broadcast和dispatch,2.x的版本移除了,但是可以自己实现,主要用来跨级通信,可以跨多级;主要也是利用emit和on的思想 $attrs和$listeners用在父组件传递数据给子组件或者孙组件,主要是获取非props,class,style的属性- eventBus 也是基于发布订阅
- vuex全局数据仓库
根据需要实现的业务不同,可以采用不同的通讯方式