vue 实现任意组件之间的通信

一、全局事件总线

1、创建Vue实例时在Vue原型上绑定vue实例 Vue实例或VueComponent实例中拥有 $on、$once、$emit 而且开发过程中有且只有一个vue实例 不需要额外声明vm 或 vc实例
new Vue({
	el: '#app',
	render: h => h(App),
	beforeCreate() {
		Vue.prototype.$bus = this	//将自身绑定到Vue原型作为全局总线
	}
})
2、使用时只需要在全局总线中声明绑定事件即可
sendStudentName(){
	this.$bus.$emit('hello',666)	//声明自定义组件
}
mounted(){
	this.$bus.$on('hello',(data)=>{	//绑定自定义事件到全局总线
		console.log(this)
		console.log('我是组件,收到了数据',data)
	})
},
beforeDestroy() {	
	this.$bus.$off('hello')//销毁自定义事件 注意要指定事件名称 不指定会销毁所有自定义事件 而所有组件使用的是同一个总线
}

二、消息订阅与发布

安装第三方消息订阅发布库

例如 安装pubsub.js 执行** npm i pubsub-js **命令

mounted(){
	this.pubId = pubsub.subscribe('hello', (msgname,data)=>{	//订阅消息 第一个参数为消息名称 第二个是回调函数 回调函数中第一个参数为消息名称 第二个参数为获取的数据
		console.log(this)
		console.log('有人发布了hello消息,hello消息的回调执行了',msgname,data)
	})
},
beforeDestroy() {
	pubsub.unsubscribe(this.pubId())	//通过消息订阅Id取消订阅
}
sendStudentName(){
	pubsub.publish('hello',666)	//发布消息 第一个参数为消息名称 第二个参数为消息所带数据
}
消息订阅发布 与 事件总线很相似
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值