【问题标题】:Vue.js what's the difference of $emit and $dispatch?Vue.js 的 $emit 和 $dispatch 有什么区别?
【发布时间】:2016-12-02 01:57:08
【问题描述】:

在 vue2.0 中,事件 $dispatch$broadcast 已弃用。

我发现$dispatch$emit 相似。

它们之间有什么区别?迁移时直接将$dispatch 替换为$emit 是否安全?

【问题讨论】:

标签: javascript events mvvm vue.js vuejs2


【解决方案1】:

不,您将无法在任何地方将$disptach 替换为$emit。您可以替换它,无论您使用它进行孩子与父母之间的通信,但对于其他情况,您可能需要采取其他方法。

来自documentation(来自Upgrade Tips的Evan you的类似cmets):

这些方法最常见的用途之一是在父级与其直接子级之间进行通信。在这些情况下,您实际上可以使用 v-on 收听来自孩子的 $emit。这使您可以通过增加明确性来保持事件的便利性。

但是,在远距离后代/祖先之间进行通信时,$emit 对您没有帮助。相反,最简单的升级可能是使用集中式事件中心。

来自$dispatch的文档

调度一个事件,首先在实例本身上触发它,然后沿着父链向上传播。传播在触发父事件侦听器时停止,除非该侦听器返回 true。

另一方面$emit:

在当前实例上触发事件。任何额外的参数都会被传递到监听器的回调函数中。

因此您可以看到,如果您通过$dispatch 将通信传递给多层父元素,您必须使用$emit 以不同方式处理该代码

【讨论】:

  • 好吧,意思是$emit只传递给它自己和它的父节点,而$dispatch是冒泡传递的,对吗?
  • 在父子通信的上下文中:是的,但是 $emit 还有其他用途,您可以在documentation 中探索。但是当您从 vue 1 迁移时,您需要考虑这种链式传播的差异。
  • 作为 eventBus ($on, $emit) codepen.io/intosite/pen/WxQZvq 的简单 Vue 元素的示例代码笔
猜你喜欢
  • 1970-01-01
  • 2016-09-17
  • 1970-01-01
  • 2016-11-14
  • 2013-09-10
  • 2018-11-27
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多