美文网首页
vue2.x中组件间事件的派发与接收

vue2.x中组件间事件的派发与接收

作者: 明灭_ | 来源:发表于2018-12-04 20:35 被阅读0次

在项目开发过程中,我们可能会需要在两个组件间进行事件的通信。

一、在vue1.x中

使用dispatch 和broadcast进行通信。示例如下:

/* child.vue */

this.$dispatch('eventName', this.data);
/* parent.vue */
event: {
    'eventName': function(data) {
        ...
    }
}

但在vue2.x已被弃用。官方文档解释如下:

因为基于组件树结构的事件流方式实在是让人难以理解,并且在组件结构扩展的过程中会变得越来越脆弱。这种事件方式确实不太好,我们也不希望在以后让开发者们太痛苦。并且dispatch 和broadcast 也没有解决兄弟组件间的通信问题。

二、在vue2.x中

官方给出的最简单的升级建议,是使用集中的事件处理器,而且也明确说明一个空的vue实例就可以做到,因为vue实例实现了一个事件分发接口。示例如下:
main.js:

new Vue({
  el: '#app',
  router,
  data: {
    eventHub: new Vue()
  }
})

某一个组件内调用事件触发:

this.$root.eventHub.$emit('eventName', data);

另一个组件内调用事件接收,在组件销毁时解除事件绑定,使用$off方法:

created() {
  this.$root.eventHub.$on('eventName', (data) => {
    // do something
  });
}

然后就搞定啦!

相关文章

网友评论

      本文标题:vue2.x中组件间事件的派发与接收

      本文链接:https://www.haomeiwen.com/subject/sdbvcqtx.html