Как приложение 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))