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

Alf*_*ang 8 javascript events mvvm vue.js vuejs2

在vue2.0事件$dispatch$broadcast已经过时了.

我发现它$dispatch与之相似$emit.

它们之间的区别是什么?它是安全的直接更换$dispatch$emit迁移时.

Sau*_*abh 14

不,你不会是能够取代$disptach$emit无处不在.无论您在哪里使用它进行从孩子到父母的通信,您都可以替换它,但对于其他情况,您可能需要采取其他方法.

文档中(Evan你在升级提示中的类似评论):

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

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

来自$ dispatch的文档

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

另一方面$ emit:

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

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

  • 好吧,这意味着 `$emit` 只传递给它自己和它的父级,而 `$dispatch` 则通过冒泡传递,对吗? (2认同)