Vuejs
Tutorial Vuejs: Manejo de eventos en Vue con v-on
Aprende a manejar eventos en Vue utilizando la directiva v-on. Descubre cómo manejar clics, teclas y eventos personalizados en tus componentes.
Aprende Vuejs GRATIS y certifícateIntroducción a la directiva v-on
La directiva v-on
en Vue se utiliza para escuchar y manejar eventos del DOM. Es una herramienta fundamental para interactuar con los usuarios y responder a sus acciones en la interfaz de usuario. La sintaxis básica de v-on
permite asociar eventos del DOM con métodos de Vue o con expresiones en línea.
Sintaxis básica
La forma más común de utilizar v-on
es asociando un método a un evento. La sintaxis es la siguiente:
<button v-on:click="handleClick">Haz clic aquí</button>
En este ejemplo, cuando el usuario haga clic en el botón, se ejecutará el método handleClick
definido en la instancia de Vue.
Abreviatura
Vue proporciona una abreviatura para v-on
, que es el símbolo @
. Por lo tanto, el ejemplo anterior se puede escribir de forma más concisa como:
<button @click="handleClick">Haz clic aquí</button>
Manejo de eventos con métodos en línea
Además de vincular eventos a métodos definidos en la instancia de Vue, también es posible usar una expresión en línea directamente en la directiva v-on
:
<button @click="contador += 1">Incrementar contador</button>
En este caso, cada vez que se haga clic en el botón, se ejecutará la expresión contador += 1
.
Pasar parámetros a los métodos
Es posible pasar argumentos a los métodos cuando se utiliza v-on
. Para ello, se pueden utilizar paréntesis en la llamada al método:
<button @click="saludar('Hola')">Saludar</button>
Aquí, el método saludar
recibirá el argumento 'Hola'
cuando se haga clic en el botón.
Manejo de eventos de clic
El manejo de eventos de clic en Vue se realiza principalmente a través de la directiva v-on
(o su abreviatura @
). Esta directiva permite escuchar eventos de clic del DOM y asociarlos con métodos o expresiones dentro de la instancia de Vue.
Para manejar un evento de clic, se puede usar la siguiente sintaxis básica:
<template>
<button @click="handleClick">Haz clic aquí</button>
</template>
<script>
export default {
methods: {
handleClick() {
console.log('El botón fue clicado');
}
}
}
</script>
En este ejemplo, cuando el usuario haga clic en el botón, se ejecutará el método handleClick
, que simplemente imprime un mensaje en la consola.
Pasar parámetros al método
Es posible pasar parámetros específicos al método manejador de eventos. Esto se logra utilizando paréntesis en la llamada al método dentro de v-on
:
<template>
<button @click="saludar('Hola')">Saludar</button>
</template>
<script>
export default {
methods: {
saludar(mensaje) {
console.log(mensaje);
}
}
}
</script>
En este caso, el método saludar
recibirá el argumento 'Hola'
cada vez que se haga clic en el botón.
En este caso, la propagación del evento de clic se detendrá en el botón y no se propagará a los elementos padres.
Uso de expresiones en línea
Además de métodos, se pueden utilizar expresiones en línea directamente dentro de v-on
:
<template>
<button @click="contador += 1">Incrementar contador</button>
</template>
<script>
export default {
data() {
return {
contador: 0
};
}
}
</script>
Cada vez que se haga clic en el botón, el valor de contador
se incrementará en 1.
Estos son los aspectos fundamentales del manejo de eventos de clic en Vue utilizando la directiva v-on
. Esta directiva proporciona una forma flexible y poderosa de interactuar con los eventos del DOM y responder a las acciones del usuario.
Manejo de eventos de teclado
El manejo de eventos de teclado en Vue se realiza utilizando la directiva v-on
, al igual que con otros eventos del DOM. Los eventos de teclado más comunes incluyen keydown
, keyup
y keypress
.
Para escuchar un evento de teclado, se puede utilizar la siguiente sintaxis básica:
<template>
<input @keydown="handleKeyDown">
</template>
<script>
export default {
methods: {
handleKeyDown(event) {
console.log('Tecla presionada:', event.key);
}
}
}
</script>
En este ejemplo, cada vez que se presiona una tecla mientras el input está enfocado, se ejecutará el método handleKeyDown
, que imprime la tecla presionada en la consola.
Uso de modificadores de teclas
Vue proporciona modificadores específicos para eventos de teclado, lo que permite manejar eventos de teclas específicas de manera más sencilla. Algunos de los modificadores de teclas más utilizados incluyen:
.enter
para la tecla Enter..tab
para la tecla Tab..delete
para las teclas Delete y Backspace..esc
para la tecla Escape..space
para la barra espaciadora..up
,.down
,.left
,.right
para las teclas de flecha.
Ejemplo de uso de modificadores de teclas:
<template>
<input @keyup.enter="submitForm">
</template>
<script>
export default {
methods: {
submitForm() {
console.log('Formulario enviado');
}
}
}
</script>
En este caso, el método submitForm
se ejecutará únicamente cuando se presione la tecla Enter.
Combinaciones de teclas
Es posible manejar combinaciones de teclas utilizando modificadores adicionales como .ctrl
, .alt
, .shift
y .meta
(para la tecla Command en macOS). Esto permite escuchar eventos cuando se presionan teclas en combinación con estas teclas modificadoras.
Ejemplo de manejo de combinaciones de teclas:
<template>
<input @keydown.ctrl.enter="submitForm">
</template>
<script>
export default {
methods: {
submitForm() {
console.log('Formulario enviado con Ctrl + Enter');
}
}
}
</script>
Aquí, submitForm
se ejecutará solamente cuando se presionen simultáneamente las teclas Ctrl y Enter.
Uso de alias de teclas
Vue permite definir alias personalizados para teclas específicas utilizando la opción keyCodes
en la instancia de Vue. Esto es útil cuando se desea utilizar nombres más descriptivos para teclas específicas.
Definiendo un alias de tecla:
<template>
<input @keyup.customAlias="handleCustomKey">
</template>
<script>
export default {
methods: {
handleCustomKey() {
console.log('Tecla personalizada presionada');
}
},
keyCodes: {
customAlias: 65 // Código de tecla para 'A'
}
}
</script>
En este ejemplo, handleCustomKey
se ejecutará cuando se presione la tecla 'A', utilizando el alias customAlias
.
Prevención del comportamiento predeterminado y propagación de eventos
Al igual que con otros eventos, se pueden usar los modificadores .prevent
y .stop
para prevenir el comportamiento predeterminado del evento de teclado o detener la propagación del mismo:
<template>
<input @keydown.enter.prevent="handleEnter">
</template>
<script>
export default {
methods: {
handleEnter() {
console.log('Enter presionado, comportamiento predeterminado prevenido');
}
}
}
</script>
En este caso, el comportamiento predeterminado de la tecla Enter será prevenido, y solo se ejecutará el método handleEnter
.
Estos son los aspectos fundamentales del manejo de eventos de teclado en Vue utilizando la directiva v-on
. Esta directiva permite escuchar y manejar eventos de teclado de manera eficiente y flexible, facilitando la interacción con el usuario en aplicaciones Vue.
Uso de modificadores de eventos
Los modificadores de eventos en Vue permiten alterar el comportamiento predeterminado de los eventos del DOM de forma sencilla y declarativa. Estos modificadores se aplican directamente en la directiva v-on
(o su abreviatura @
) y proporcionan una forma eficiente de manejar eventos sin necesidad de escribir código adicional para tareas comunes como detener la propagación del evento o prevenir su comportamiento predeterminado.
Modificadores de eventos comunes
.stop
: Detiene la propagación del evento hacia los elementos padres.
<button @click.stop="manejarClick">Haz clic aquí</button>
En este ejemplo, la propagación del evento de clic se detendrá en el botón y no se propagará a los elementos padres.
.prevent
: Previene el comportamiento predeterminado del evento.
<form @submit.prevent="enviarFormulario">Enviar</form>
Aquí, el comportamiento predeterminado del evento de envío del formulario se previene, evitando que la página se recargue.
.capture
: Añade el manejador de eventos en la fase de captura en lugar de la fase de burbujeo.
<button @click.capture="manejarCaptura">Captura</button>
Este modificador asegura que el manejador se ejecute durante la fase de captura, antes de que los eventos burbujeen hacia arriba.
.self
: Ejecuta el método solo si el evento se dispara desde el propio elemento y no desde un hijo.
<button @click.self="manejarClick">Haz clic aquí</button>
En este caso, el método manejarClick
solo se ejecutará si el clic se produce directamente en el div
, no en sus elementos hijos.
.once
: Hace que el evento se maneje solo una vez.
<button @click.once="manejarUnaVez">Clic una vez</button>
El método manejarUnaVez
se ejecutará solo la primera vez que se haga clic en el botón.
Combinación de modificadores
Es posible combinar varios modificadores en un mismo evento para lograr el comportamiento deseado. Por ejemplo:
<button @click.stop.prevent="manejarClick">Haz clic aquí</button>
En este ejemplo, la propagación del evento de clic se detendrá y también se prevendrá su comportamiento predeterminado.
Modificadores específicos de eventos de teclado
Al manejar eventos de teclado, se pueden utilizar modificadores específicos para teclas comunes:
<input @keyup.enter="enviarFormulario">
En este caso, el método enviarFormulario
se ejecutará solo cuando se presione la tecla Enter.
Modificadores para combinaciones de teclas
Vue permite manejar combinaciones de teclas mediante modificadores adicionales como .ctrl
, .alt
, .shift
, y .meta
:
<input @keydown.ctrl.enter="enviarFormulario">
Aquí, enviarFormulario
se ejecutará solo cuando se presionen simultáneamente las teclas Ctrl y Enter.
Ejemplo práctico
A continuación, un ejemplo que combina varios modificadores para ilustrar su uso en una aplicación Vue:
<template>
<div>
<form @submit.prevent="enviarFormulario">
<input type="text" @keydown.enter="validarEntrada" @keydown.esc="cancelarEntrada">
<button @click.stop.prevent="manejarClick">Enviar</button>
</form>
</div>
</template>
<script>
export default {
methods: {
enviarFormulario() {
console.log('Formulario enviado');
},
validarEntrada() {
console.log('Entrada validada');
},
cancelarEntrada() {
console.log('Entrada cancelada');
},
manejarClick() {
console.log('Botón clicado');
}
}
}
</script>
En este ejemplo:
- El formulario no se recarga debido a
@submit.prevent
. - La entrada se valida al presionar Enter gracias a
@keydown.enter
. - La entrada se cancela al presionar Esc con
@keydown.esc
. - El botón detiene la propagación y previene el comportamiento predeterminado con
@click.stop.prevent
.
Estos modificadores proporcionan una forma declarativa y eficiente de manejar eventos en Vue, reduciendo la necesidad de escribir código adicional y mejorando la legibilidad del código.
Eventos personalizados con $emit
En Vue, los eventos personalizados permiten la comunicación entre componentes, especialmente desde componentes hijos hacia componentes padres. El método $emit
es fundamental para emitir estos eventos personalizados.
Para emitir un evento personalizado desde un componente hijo, se utiliza el método $emit
dentro de la instancia del componente. Este método toma al menos un argumento: el nombre del evento que se desea emitir. Opcionalmente, se pueden pasar datos adicionales como argumentos adicionales.
Emisión de un evento personalizado
A continuación, se muestra cómo emitir un evento personalizado desde un componente hijo:
<template>
<button @click="emitirEvento">Emitir evento</button>
</template>
<script>
export default {
methods: {
emitirEvento() {
this.$emit('eventoPersonalizado', { mensaje: 'Hola desde el componente hijo' });
}
}
}
</script>
En este ejemplo, cuando se hace clic en el botón, se emite un evento llamado eventoPersonalizado
con un objeto que contiene un mensaje.
Escucha de un evento personalizado en el componente padre
El componente padre puede escuchar el evento personalizado utilizando la directiva v-on
(o su abreviatura @
):
<template>
<div>
<componente-hijo @eventoPersonalizado="manejarEvento"></componente-hijo>
</div>
</template>
<script>
import ComponenteHijo from './ComponenteHijo.vue';
export default {
components: {
ComponenteHijo
},
methods: {
manejarEvento(payload) {
console.log(payload.mensaje);
}
}
}
</script>
En el componente padre, el método manejarEvento
se ejecutará cuando el evento eventoPersonalizado
sea emitido por el componente hijo. El payload
recibido contiene los datos enviados desde el hijo, en este caso, un mensaje.
Uso de eventos personalizados para la comunicación entre componentes
Los eventos personalizados son útiles para comunicar cambios de estado o acciones específicas desde un componente hijo hacia su padre. Por ejemplo, en un formulario de entrada, un componente hijo podría emitir un evento cuando un usuario envía el formulario:
<!-- ComponenteHijo.vue -->
<template>
<form @submit.prevent="enviarFormulario">
<input v-model="nombre" type="text" placeholder="Nombre">
<button type="submit">Enviar</button>
</form>
</template>
<script>
export default {
data() {
return {
nombre: ''
};
},
methods: {
enviarFormulario() {
this.$emit('formularioEnviado', this.nombre);
}
}
}
</script>
<!-- ComponentePadre.vue -->
<template>
<div>
<componente-hijo @formularioEnviado="procesarFormulario"></componente-hijo>
</div>
</template>
<script>
import ComponenteHijo from './ComponenteHijo.vue';
export default {
components: {
ComponenteHijo
},
methods: {
procesarFormulario(nombre) {
console.log('Formulario enviado con nombre:', nombre);
}
}
}
</script>
En este ejemplo, el componente hijo ComponenteHijo
emite el evento formularioEnviado
con el nombre ingresado por el usuario. El componente padre ComponentePadre
escucha este evento y procesa el nombre recibido.
Emisión de múltiples eventos
Un componente puede emitir múltiples eventos personalizados, lo que permite una comunicación más compleja y detallada entre componentes:
<!-- ComponenteHijo.vue -->
<template>
<div>
<button @click="accion1">Acción 1</button>
<button @click="accion2">Acción 2</button>
</div>
</template>
<script>
export default {
methods: {
accion1() {
this.$emit('accionRealizada', 'acción 1');
},
accion2() {
this.$emit('accionRealizada', 'acción 2');
}
}
}
</script>
<!-- ComponentePadre.vue -->
<template>
<div>
<componente-hijo @accionRealizada="manejarAccion"></componente-hijo>
</div>
</template>
<script>
import ComponenteHijo from './ComponenteHijo.vue';
export default {
components: {
ComponenteHijo
},
methods: {
manejarAccion(accion) {
console.log('Se realizó:', accion);
}
}
}
</script>
En este caso, el componente hijo ComponenteHijo
emite el evento accionRealizada
con diferentes mensajes dependiendo de cuál botón se presione. El componente padre ComponentePadre
maneja este evento y procesa el mensaje correspondiente.
Estos son algunos de los conceptos y técnicas avanzadas para manejar eventos personalizados en Vue utilizando $emit
. Esta funcionalidad es esencial para crear componentes reutilizables y mantener una comunicación clara y estructurada entre diferentes partes de una aplicación Vue.
Ejercicios de esta lección Manejo de eventos en Vue con v-on
Evalúa tus conocimientos de esta lección Manejo de eventos en Vue con v-on con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.
Solicitud HTTP con Axios
Estilización de componentes en Vue.js
Comunicación de componentes con props
Uso de hooks de ciclo de vida en Vue
Introducción a los componentes
Introducción a Vue
Navegación programática y redirección
Uso de la directiva v-if en Vuejs
Crear componente Composition API
Realizar una solicitud GET con Fetch API en Vue
Uso avanzado de los composables
Galería de imágenes con navegación y rutas
Uso de rutas anidadas y dinámicas
Definición y manejo de rutas en Vue
Uso de la directiva v-for en Vuejs
Manejo de eventos con v-on
Crear un componente con Options API en Vue
Creación de rutas con Vue Router
Uso básico de los composables
Binding bidireccional con v-model y defineModel
Instalación y configuración
Lista de tareas básica en Vuejs
Uso de provide e inject
Gestión de tareas con estado global y API
Introducción a la sintaxis de plantillas
Implementar reactividad con ref y reactive
Componente Vue con Suspense
Evaluación test de conocimientos Vuejs
Todas las lecciones de Vuejs
Accede a todas las lecciones de Vuejs y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Introducción A Vue Y Su Ecosistema
Introducción Y Entorno
Instalar Y Configurar Vue Con Vite
Introducción Y Entorno
Introducción A La Sintaxis De Plantillas
Componentes
Introducción A Componentes
Componentes
Componentes Con Options Api
Componentes
Componentes Con Composition Api
Componentes
Renderizado Condicional Con V-if
Componentes
Renderizado Iterativo Con V-for
Componentes
Props Y Comunicación Entre Componentes
Componentes
Manejo De Eventos En Vue Con V-on
Componentes
Binding Bidireccional Con V-model Y Definemodel
Componentes
Estilización De Componentes
Componentes
Reactividad Con Ref Y Reactive
Composición Y Reactividad
Ciclo De Vida Con Composition Api
Composición Y Reactividad
Composition Api: Provide E Inject
Composición Y Reactividad
Introducción A Los Composables
Composición Y Reactividad
Uso Avanzado De Composables
Composición Y Reactividad
Introducción A Vue Router
Navegación Y Enrutamiento
Definición Y Manejo De Rutas
Navegación Y Enrutamiento
Rutas Anidadas Y Dinámicas
Navegación Y Enrutamiento
Navegación Programática Y Redirección
Navegación Y Enrutamiento
Solicitudes Http Con Fetch Api
Interacción Http Con Apis De Backend
Solicitudes Http Con Axios
Interacción Http Con Apis De Backend
Introducción A Suspense
Interacción Http Con Apis De Backend
Evaluación Test De Conocimientos Vuejs
Evaluación
Certificados de superación de Vuejs
Supera todos los ejercicios de programación del curso de Vuejs y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.
En esta lección
Objetivos de aprendizaje de esta lección
- Comprender la sintaxis y uso básico de la directiva
v-on
. - Aprender a manejar eventos del DOM, como clics y teclas.
- Utilizar modificadores de eventos para alterar su comportamiento.
- Emitir y escuchar eventos personalizados entre componentes.
- Implementar
v-model
en componentes personalizados.