全局事件总线挂载在哪里?
全局事件总线的注册和调用逻辑图
源码
[vu_vue中全局事件总线的标准实现 - 快捷方式.lnk](..\ab_code\vu_vue中全局事件总线的标准实现 - 快捷方式.lnk)
代码图
的理解
为什么全局事件管理器本质上是个组件?
源码
[vu_vue中全局事件总线的两种方式的对比 - 快捷方式.lnk](..\ab_code\vu_vue中全局事件总线的两种方式的对比 - 快捷方式.lnk)
注册BusComponent组件,然后添加到Vue的原型对象中?
-
其实这个全局事件总线管理器,本质上也是个组件,只是没有在vm里面注册
-
为什么我们需要这个总线管理器,也得是个组件呢?
- 因为我们得要访问Vue原型对象中的方法,比如说
$on
,$emit
的方法 - 也就是我们需要通过原型链
能够访问到这个Vue的原型对象
- 因为我们得要访问Vue原型对象中的方法,比如说
原理图
代码图
直接使用vm实例,将其添加到Vue的原型对象中
- 上面的方法虽然实现全局总线的添加,也是很是麻烦,还得新弄一个BusComponent()构造函数
- 能不能有更加简便的方法呢?
- 我们发现这个vm实例的
__proto__
也是指向这个Vue的原型对象,能不能直接把放进去
原理图
代码图
对比输出
- 其实实现的效果是一样的
- 另外这个Vue()和VueComponent()几乎是一样,只有小小的差别
- Vue()一般是使用来创建vm实例,可以理解成创建根组件Root组件
- VueComponent()用来创建普通的组件,也就是vc组件,
- 所以说,从某种程度上来说,不论是根组件还是普通组件,本质上都是组件