this.$emit 与 this.$root.$emit,vuejs 中的最佳实践

shs*_*shs 6 event-handling vue.js vuejs2

我有使用 .vue2 添加和删除的组件v-if。在某些情况下,我在$emit发送者和$on接收者之间进行通信。

我一直在使用this.$root.$emit广播自定义事件并this.$root.$on处理事件。我发现使用this.$root.$onrequire this.$root.$off(来自beforeDestroy),否则被删除的组件可能会尝试处理它,并且会发生不好的事情。

我有两个问题:

  1. this.$root.$emit和 和有什么区别this.$emit
  2. 如果我使用this.$on,我还必须将其配对吗this.$off?或者当组件被移除时处理程序会自动“关闭”吗?

ton*_*y19 8

  1. this.$root.$emit和 和有什么区别this.$emit

this.$root获取根组件实例(通常App.vue),因此this.$root.emit从根组件发出一个事件。

this.$emit只是从当前组件发出一个事件。

  1. 如果我使用this.$on,我还必须将其配对吗this.$off?或者当组件被移除时处理程序会自动“关闭”吗?

this.$off不需要。是的,当组件被销毁时,处理程序将自动被删除。