I am reading some code that I want to update:
<b-input :value="value" @input="$emit('input', $event)" ref="input" :maxlength="maxlength"/>
what does @input="$emit('input', $event)"
stand for?
Where and how can I listen for the input event?
Components in Vue are composed of three parts; a template (which is like HTML), styles and JavaScript. These can be split into multiple files or the same .
The this keyword within Vue gives you easy access to all of your data and functionalities. Wether you want to access a data property, a computed property, a component prop or a function, you can all find them directly on the this keyword.
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.
@input
is the short-hand for v-on:input
which binds to the component's input
event. vm.$emit
is documented here and has an example with a similar use-case here.
In your case your component simply emits an event with the same name and the same arguments as the one it receives from its child b-input
. Programatically you can listen to these events with vm.$on
, e.g. in your mounted
method:
export default {
components: { BInput },
mounted () {
this.$on('input', (event) => {
console.log(event);
});
}
}
$emit
is data passed to an other component, see this example:
Component: getEmit.vue
<template>
<!--get data-->
<button-emit v-on:data="getValue"></button-emit>
</template>
<script>
import buttonEmit from './buttonEmit'
export default {
name: 'getEmit',
components: { buttonEmit },
methods: {
// get payload in parameter
getValue(event) {
alert('Get Emit Success' + event)
}
}
}
</script>
Component: buttonEmit.vue
<template>
<button @click="emit($event)"></button>
</template>
<script>
export default {
name: 'buttonEmit',
methods: {
emit(event) {
// Emit text data the payload event
this.$emit('data', event)
}
}
}
</script>
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