javascript - Vue.js 3 this.$root.$on 不是函数
问题描述
我有一个触发this.$root.$emit('some-root-event')
像的组件
clickHandler: function() {
this.$root.$emit("some-root-event", "aaaaaaaaaaaaaaaaaaaaaa");
console.log('About $root.$emit')
}
内部的另一个组件应该捕获此事件,但会引发错误:
this.$root.$on 不是函数
第二个组件的代码看起来像
mounted() {
this.$root.$on("some-root-event", (data) => {
console.log("About listener catch $root some-root-event"); console.log(data)
})
}
有人可以帮助我了解问题出在哪里吗?
解决方案
根据Vue.js 3中的这个 RFC,他们删除$on
了实例方法:$once
$off
他们的动机:
Vue 1.x 实现了类似于 AngularJS 的组件事件系统,
$dispatch
树$broadcast
中的组件可以通过上下发送事件进行通信。在 Vue 2 中,我们删除$dispatch
并$broadcast
支持更多状态驱动的数据流(props down,event up)。使用 Vue 2 的 API,$emit
可用于触发由父组件声明式附加的事件处理程序(在模板或渲染函数中),但也可用于触发通过事件发射器 API($on$off
和$once
)。这实际上是一个重载:完整的事件发射器 API 不是典型的组件间数据流的一部分。它们很少使用,并且确实没有充分的理由通过组件实例公开它们。因此,此 RFC 建议删除$on
,$off
和$once
实例方法
推荐阅读
- python - 从python中的字符串中删除前导空字符
- activemq - Apache ActiveMQ - 传输连接到:tcp:/ 失败:java.io.EOFException /java.net.SocketException:软件导致连接中止:recv 失败
- java - 如何检索包含已执行 jar 文件的目录?
- python - 如何在 matplotlib 图中定位文本而不提及任何坐标?
- sharepoint - PowerApps 流:操作失败的条件
- r - R - 如何使用这些密钥导入打开的数据集(zip 文件)
- android-ndk - 从android java调用C外部库(.so)
- facebook-graph-api - Facebook 提交登录审核,但仍处于开发模式
- ios - 使用自定义过渡和自定义标识符时 SwiftUI 系统布局中断
- string - 在 SAP Lumira 中按字符串变量过滤数据源