vue.js - 使用 vm.$once() 时,Vue 应用程序如何将附加参数传递给事件侦听器?
问题描述
在Vue 应用程序中,它可以添加使用vm.$once调用一次的事件监听器。
例如,在 Vue App 的子组件中,它可以使用vm.$emit('myEvent', data)
. 发出事件
然后可以通过vm.$once
在 Vue 应用程序中将事件侦听器添加到此事件来处理它。
此时,我想将附加数据传递给事件处理程序。
我试过如下。但它会引发错误。
未捕获的 ReferenceError: $event 未定义
//In the Vueapp
this.$refs.child.$once(
'myEvent', this.eventHandler($event, additional_data)
);
但我认为它可以在使用时传递额外的数据v-on
。
<child-component ref="child" v-on:myEvent="eventHandler($event, additional_data)"></child-component>
//$event is the data emitted from the event , "myEvent".
使用vm.$once
orvm.$on
时,不能传递附加参数吗?
注意:我使用的原因vm.$once
是我想eventHandler
在发出自定义事件时只执行一次,myEvent
并动态添加它。
解决方案
您需要捕获传递给事件处理程序的参数。您可以通过对调用您的方法的处理程序使用匿名函数来执行此操作。例如
this.$refs.child.$once('myEvent', $event => {
this.eventHandler($event, additional_data)
})
您也可能会喜欢,Function.prototype.bind()
但是您必须将参数列表反转为bind
前置参数。
例如
methods: {
eventHandler(data, $event) { // reversed argument list
// etc
}
}
和
this.$refs.child.$once('myEvent', this.eventHandler.bind(this, additional_data))
推荐阅读
- email - SQL Server 配置参数历史
- android - Android Room:添加和删除工作无限
- python - 有没有办法可以跳过python中文件路径的用户名
- php - QBXML 接收付款显示 Web 连接器中的解析错误 - php Devkit
- api - VsCode debbug Node Serverless - 断点被忽略,因为找不到生成的代码(源映射问题?)
- c# - Selenium SendKeys 并不总是在 Blazor 应用程序中工作
- node.js - react-native-webview 错误:方法没有覆盖或实现超类型的方法
- java - 仅当输入对象上的相应字段不为空时,如何在现有对象上设置字段
- python - 获取视频尺寸时出错
- python-3.x - 使用 __deepcopy__ 时的 __del__