- 开始时间:2020-01-21
- 目标主要版本:3.x
- 引用 issue:https://github.com/vuejs/vue/issues/5443 和 https://github.com/vuejs/vue-next/issues/635
- 实现的 PR:N/A
摘要
移除 $on、$off 和 $once 实例方法。Vue 实例不再实现事件触发器接口。
基本范例
N/A
动机
Vue 1.x 实现了 AngularJS 类似的组件事件系统,有 $dispatch 和 $broadcast,树形的组件可以通过向上和向下发送事件进行交流。
在 Vue2 中,我们删除了 $dispatch 和 $broadcast,转而采用更多的状态驱动的数据流(用 props 向下传递数据,用 events 来向上传递数据)。
在 Vue2 的 API 中,$emit 可以用来触发父组件声明的附加的事件处理程序(在模版或者渲染函数中),但也可以通过触发事件发射器 API($on、$off 和 $once)强制附加的处理程序。这实际上是一个重载:完整的事件发射器 API 并不是典型的组件间数据流的一部分。它们很少被使用,也没有充分的理由让它们通过组件实例被暴露。因此本 RFC 建议删除 $on、$off 和 $once 实例方法。
具体设计
N/A
缺点
N/A
备选方案
N/A
采纳策略
在 Vue2 中,事件发射器 API 最常见的用法是,使用一个空的 Vue 实例作为一个事件中心。这可以通过使用一个实现了事件发射器接口的外部库来替代,例如 mitt。
这些方法在兼容性构建中也可以得到支持。
没有解决的问题
N/A
