Vue.js $ emit和$ dispatch的区别是什么?

时间:2016-12-02 01:57:08

标签: javascript events mvvm vue.js vuejs2

在vue2.0中,不推荐使用事件$dispatch$broadcast

我发现$dispatch$emit类似。

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

1 个答案:

答案 0 :(得分:13)

不,您无法将$disptach替换为$emit。您可以替换它,无论您使用它从孩子到父母进行交流,但对于其他情况,您可能需要采取其他方法。

来自documentation(Evan你在Upgrade Tips中的类似评论):

  

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

     

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

来自$dispatch

的文档
  

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

另一方面$emit

  

在当前实例上触发事件。任何其他参数都将传递给侦听器的回调函数。

所以你可以看到,如果您通过$dispatch将通信传递给多层父元素,则必须使用$emit

以不同方式处理该代码