(1)props / $emit 适用 父子组件通信
(2)EventBus ($emit / $on) 适用于 父子、隔代、兄弟组件通信
这种方法通过一个空的 Vue 实例作为中央事件总线(事件中心),
用它来触发事件和监听事件,从而实现任何组件间的通信,包括父子、隔代、兄弟组件
(3)Vuex 适用于 父子、隔代、兄弟组件通信
(4)ref 与 $parent / $children 适用 父子组件通信
+ ref:如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;
如果用在子组件上,引用就指向组件实例
+ $parent / $children:访问父 / 子实例
(5)provide / inject 适用于 隔代组件通信
祖先组件中通过 provider 来提供变量,然后在子孙组件中通过 inject 来注入变量。
provide / inject 主要解决了跨级组件间的通信问题,不过它的使用场景,
主要是子组件获取上级组件的状态,跨级组件间建立了一种主动提供与依赖注入的关系。
(6)$attrs/$listeners 适用于 隔代组件通信
+ $attrs:包含了父作用域中不被 prop 所识别 (且获取) 的特性绑定 ( class 和 style 除外 )。
当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 ( class 和 style 除外 ),
并且可以通过 v-bind="$attrs" 传入内部组件。
+ $listeners:包含了父作用域中的 (不含 .native 修饰器的) v-on 事件监听器。
它可以通过 v-on="$listeners" 传入内部组件