Как приложение Vue может передать дополнительные параметры прослушивателю событий при использовании vm.$ Once()?

В приложении Vue оно может добавить прослушиватель событий, который вызывается один раз, используя vm. $ Один раз.
Например, в дочернем компоненте Vue App он может генерировать событие, используя vm.$emit('myEvent', data), выпустить событие

И тогда это может быть обработано путем добавления слушателя события к этому событию, используя vm.$once в приложении Vue.
В настоящее время я хочу передать дополнительные данные обработчику событий.

Я пытался следующим образом. Но это выдает ошибку.

Uncaught ReferenceError: $ событие не определено

    //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 или же vm.$onразве он не может передать дополнительный параметр?

Примечание: причина, по которой я использую vm.$once является то, что я хочу выполнить eventHandler только один раз при отправке пользовательского события, myEvent и добавить его динамически.

1 ответ

Решение

Вам нужно захватить аргументы, переданные в обработчик событий. Вы можете сделать это, используя анонимную функцию для обработчика, который вызывает ваш метод. Например

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))
Другие вопросы по тегам