Vue全局事件总线

Vue全局事件总线,第1张


今天写项目的时候遇到一个需求,就是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")
},

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/944872.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-18
下一篇 2022-05-18

发表评论

登录后才能评论

评论列表(0条)

保存