Vue 应用程序如何在使用 vm.$once() 时将附加参数传递给事件侦听器?

How could the Vue app pass the additional parameters to the event listener when using vm.$once()?

Vue app中,可以通过vm.$once.
添加一次调用的事件监听器 例如,在 Vue App 的子组件中,它可以使用 vm.$emit('myEvent', data) 发出事件。 emit event

然后可以通过在 Vue 应用程序中使用 vm.$once 添加事件侦听器来处理它。
这时,我想将附加数据传递给事件处理程序。

我试过如下。但它会引发错误。

Uncaught ReferenceError: $event is not defined

    //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.$oncevm.$on时,不能传附加参数吗?

注意:我之所以用vm.$once是因为我想在发出自定义事件时只执行一次eventHandlermyEvent 并动态添加 .

您需要捕获传递给事件处理程序的参数。您可以通过为调用您的方法的处理程序使用匿名函数来完成此操作。例如

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))