源码分析
initEvents
组件实例初始化的时候会调用Vue.prototype._init,vm._init中调用了initEvents
initEvents这个函数做了以下几件事:
- 给实例上添加一个 _events 对象,用于保存自定义事件
- 获取到 父组件给 子组件绑定的自定义事件
- 调用 updateComponentListeners 开始注册
updateComponentListeners
上面用到的注册事件off
$emit
为什么给子组件绑定自定义事件,可以在子组件中像下面这样触发?
this.$emit('visibleChange',value);
<login :isLoginVisible="isLoginVisible" @visibleChange="isLoginVisibleChange"></login>
因为组件绑定的自定义事件和Vue的自定义事件都是使用同一种方法注册的,都存在于同样一个vm._events中
vue系列课程
最近会陆续的对vue进行源码分析,一系列课程如下: