Is there a possibility in Vue to deal with incoming events inside one function in a way similar to this?
<template>
<component v-on="eventsDistributor(eventName, $event)"/>
</template>
<script>
export default {
props: {
handlers: Object,
},
methods : {
eventsDistributor (name, $event) {
let handler = this.handlers[name]
if (handler) return handler($event)
}
}
}
</script>
Listening to Events We can use the v-on directive, which we typically shorten to the @ symbol, to listen to DOM events and run some JavaScript when they're triggered. The usage would be v-on:click="handler" or with the shortcut, @click="handler" .
Vue $emit is a function that lets us emit, or send, custom events from a child component to its parent. In a standard Vue flow, it is the best way to trigger certain events.
I think $listeners
might be what you need. It's an object that contains all parent listeners, and it could be forwarded to children with v-on="$listeners"
.
For example, you have a <button>
wrapper component, and you want any listeners on the wrapper to be bound to the button:
<!-- MyButtonWrapper.vue -->
<template>
<button v-on="$listeners">Click</button>
</template>
<!-- Parent.vue -->
<template>
<!-- click and mouseover listeners are bound to inner button -->
<MyButtonWrapper @click="onClick" @mouseover="@mouseover" />
</template>
demo
There is no standard way of achieving this.
The author of vuejs offers a hack to listen on all events here. He also explains that introducing regexp or other means of listening to more events will have a performance impact and will probably not do it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With