vue八全局时间总线


全局事件总线(GlobalEventBus)

一种组件间通信的方式,适用于任意组件间通信。

  1. 想实现一个公共组件 所有组件都可以用它来绑定事件 调用函数 所有组件都可以用它来触发事件 传递参数

  2. 所有为了让所有组件都可以看到这个组件 所以让它成为 原型上的一个东西 且必须是组件(因为要用$on $emit这个是vue原型的东西 所以只有vm或者vc可以使用)

  3. 让它成为谁的原型 才可以让所有组件看到 可以让它成为一个vue原型上的东西

根据这张图可知 成为vue原型的东西 vm vc都可以拿到
4. 如果让这个公共组件成为vc可以 但是还需要创建一个 const Dm=vue.extend() (因为每次调用vue.extend 就是创建了一个vuecomponent构造函数Dm)
const d=new Dm(如何才能创建vc实例 要么写一个标签 要么自己用构造函数new一个
) 这是d才是一个vc 然后 vue.prototype.$bus=d
但是这样太过麻烦
5. 不如 让它成为vm
并且 必须让它在创建之前 如果在外面 都已经挂载
安装全局事件总线:

new Vue({
	......
	beforeCreate() {
		Vue.prototype.$bus = this //安装全局事件总线,$bus就是当前应用的vm
	},
    ....

使用事件总线:

(1)接收数据:A组件想接收数据,则在A组件中给$bus绑定自定义事件,事件的回调留在A组件自身。
绑定事件 一般写在mounted里面 调用函数写在methods里面 别忘了在销毁前解绑

methods(){
  demo(data){......}
}
.....
 mounted() {
    this.$bus.$on('checkAllTodo',this.checkAllTodo)
    this.$bus.$on('deleteTodo',this.deleteTodo)
  },
  beforeDestroy() {
    this.$bus.$off('checkAllTodo')
    this.$bus.$off('deleteTodo')
  },

(2)提供数据:
因为要触发事件 所以绑定一个按钮 然后写在methods里面

this.$bus.$emit('xxxx',数据)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值