自定义事件

一种组件间通信的方式,适用于:子组件 ===> 父组件 使用场景:A是父组件,B是子组件,B想给A传数据,那么就要在A中给B绑定自定义事件(事件的回调在A中)。 绑定自定义事件: 第一种方式,在父组件中:<Demo @atguigu="test"/><Demo v-on:atguigu="test"> 第二种方式,在父组件中:

<Demo ref="demo" />
mounted(){
  this.$refs.xxx.$on('atguigu', this.test)
}

若想让自定义事件只能触发一次,可以使用once修饰符,或$once方法。

触发自定义事件:this.$emit('atguigu',xx) 解绑自定义事件:this.$off('atguigu') 组件上也可以绑定原生DOM事件,需要使用native修饰符。 注意:通过 this.$refs.xxx.$on('atguigu',xx) 绑定自定义事件时,回调使用箭头函数,否则this指向会出问题!

全局事件总线(GlobalEventBus)

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

安装全局事件总线:

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

使用事件总线:

接收数据:A组件想接收数据,则在A组件中给$bus绑定自定义事件,事件的回调留在A组件自身。

methods(){
  demo(data){ }
}

mounted() {
  this.$bus.$on('xxxx', this.demo)
}

2.提供数据:this.$bus.$emit('xxxx',xx)

最好在beforeDestroy钩子中,用$off去解绑当前组件所用到的事件。

Last Updated:
Contributors: pengrengui