vue 全局事件总线 对比 两种方式 Vue和VueComponent

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值