props和$emit
①父组件向子组件传递数据是通过prop传递的,
②子组件传递数据给父组件是通过$emit触发事件来做到的
$attrs和$listeners (Vue 2.4开始提供)
① 如果父组件A下面有子组件B,组件B下面有组件C,这时如果组件A想传递数据给组件C怎么办呢?
② 能够让组件A之间传递消息给组件C
中央事件总线 eventBus
① 如果两个组件不是父子关系呢?这种情况下可以使用中央事件总线的方式;
② 新建一个Vue事件bus对象,然后通过bus.$emit触发事件,bus.$on监听触发的事件
provide和inject
① 父组件中通过provider来提供变量,然后在子组件中通过inject来注入变量。不论子组件有多深,只要调用了inject那么就可以注入provider中的数据。而不是局限于只能从当前父组件的prop属性来获取数据,只要在父组件的生命周期内,子组件都可以调用
$parent和$children
ref / refs
① ref:如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;如果用在子组件上,引用就指向组件实例,可以通过实例直接调用组件的方法或访问数据
vuex处理组件之间的数据交互
总结
① 父子组件通信: props; $parent / $children; provide / inject ; ref ;$attrs /$listeners
② 兄弟组件通信: eventBus ; vuex
③ 跨级通信:eventBus;Vuex;provide / inject 、$attrs / $listeners