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

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

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

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

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

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

1 Ответ

0 голосов
/ 19 сентября 2018

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

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