Vue全局事件总线


今天写项目的时候遇到一个需求,就是A组件提交表单后,需要刷新B组件的数据,但是A、B组件并没有什么关系,甚至兄弟组件都不是。

我的操作居然是将A放到B的父组件中,这样就是兄弟组件,然后在父组件给A绑定自定义事件并且给B绑定ref,然后A组件中触发自定义事件,然后在父组件的自定义回调中用$ref调用B中的方法,达到通信。最后不知道哪里出来问题,需求并没有实现。然后突然想到了全局事件总线,立马就实现了,记录一下方法。

1.安装全局事件总线(在main.js文件中)

new Vue({
  beforeCreate () { 
    // 挂载全局事件总线对象
    Vue.prototype.$bus = this
    },
  render: h => h(App)
}).$mount('#app');

2.接收数据—在需要接收数据的组件中书写,并且定义回调函数handleData(然后记得要解绑事件,操作见第四步)

methods(){
    //回调函数
    handleData(data){
        console.log('接收到了数据data' + data)
    }
},

mounted(){
    //给$bus绑定事件,第一个参数是事件名,第二个是触发后的回调
    this.$bus.$on('sendData',this.handleData)
}

3.发送数据—在提供数据的组件中书写,触发$bus绑定的事件sendData

//在需要通信时书写即可,第二个参数data为传过去的数据
this.$bus.$emit('sendData',data)

4.解绑事件—在接收组件销毁前记得解绑注册的事件(在beforeDestroy生命周期钩子中进行)

beforeDestroy() {
    this.$bus.off("sendData")
},

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值