怪物奇妙物语

宇宙无敌超级美少男的怪物奇妙物语

首页 新随笔 联系 管理

全局事件总线挂载在哪里?

image-20211114120031108

全局事件总线的注册和调用逻辑图

源码

[vu_vue中全局事件总线的标准实现 - 快捷方式.lnk](..\ab_code\vu_vue中全局事件总线的标准实现 - 快捷方式.lnk)

代码图

image-20211114120933843

image-20211114121814395的理解

image-20211114121800420

为什么全局事件管理器本质上是个组件?

源码

[vu_vue中全局事件总线的两种方式的对比 - 快捷方式.lnk](..\ab_code\vu_vue中全局事件总线的两种方式的对比 - 快捷方式.lnk)

注册BusComponent组件,然后添加到Vue的原型对象中?

  1. 其实这个全局事件总线管理器,本质上也是个组件,只是没有在vm里面注册

  2. 为什么我们需要这个总线管理器,也得是个组件呢?

    • 因为我们得要访问Vue原型对象中的方法,比如说$on,$emit的方法
    • 也就是我们需要通过原型链image-20211114163754646能够访问到这个Vue的原型对象

原理图

image-20211114165107044

代码图

image-20211114165828896

直接使用vm实例,将其添加到Vue的原型对象中

  1. 上面的方法虽然实现全局总线的添加,也是很是麻烦,还得新弄一个BusComponent()构造函数
  2. 能不能有更加简便的方法呢?
  3. 我们发现这个vm实例的__proto__也是指向这个Vue的原型对象,能不能直接把放进去

原理图

image-20211114172800118

代码图

image-20211114172422776

对比输出

  1. 其实实现的效果是一样的
  2. 另外这个Vue()和VueComponent()几乎是一样,只有小小的差别
  3. Vue()一般是使用来创建vm实例,可以理解成创建根组件Root组件
  4. VueComponent()用来创建普通的组件,也就是vc组件,
  5. 所以说,从某种程度上来说,不论是根组件还是普通组件,本质上都是组件

image-20211114172927644

总结

image-20211114173758201

posted on 2021-11-14 17:39  超级无敌美少男战士  阅读(221)  评论(0编辑  收藏  举报