Atributo emits de Vue3
En Vue3,emitsEl atributo se utiliza para definir los eventos que un componente puede emitir.
emitsEs un array o un objeto, utilizado para declarar explícitamente qué eventos personalizados emitirá el componente.
Medianteemitsel atributo, los desarrolladores pueden gestionar mejor los eventos de los componentes y mejorar la legibilidad y mantenibilidad del código.
¿Por qué usar el atributo emits?
En Vue2, el componente padre a través dev-onescucha los eventos del componente hijo, mientras que el componente hijo a través de$emitel método emite los eventos. Aunque esta forma es simple y directa, a medida que crece el tamaño del proyecto, la gestión de eventos puede volverse caótica. Vue3 introduceemitsel atributo, que tiene los siguientes beneficios:
- Declaración clara de eventos: mediante
emitsel atributo, los desarrolladores pueden saber claramente qué eventos emitirá el componente. - Legibilidad del código: al revisar en el componente
emitsel atributo, se puede comprender rápidamente las interacciones de eventos del componente. - Verificación de tipos y advertencias: si el evento emitido no está en
emitsla declaración, Vue mostrará una advertencia en modo desarrollo, ayudando a los desarrolladores a detectar problemas potenciales.
¿Cómo usar el atributo emits?
1. Uso básico
En el componente,emitspuede ser un array, en el que se enumeran los nombres de todos los eventos personalizados.
Ejemplo
export default {
emits: ['update:modelValue', 'submit'],
methods: {
handleClick() {
this.$emit('submit', 'Form submitted!');
}
}
}
</script>
En el ejemplo anterior,emitsel array declaraupdate:modelValueysubmitdos eventos. Cuando se llama athis.$emit('submit', 'Form submitted!'), se emite elsubmitevento, y se pasan los datos'Form submitted!'。
2. Uso de objeto
emitsTambién puede ser un objeto. Las claves del objeto son los nombres de los eventos, y los valores son funciones de validación. La función de validación se utiliza para verificar si los parámetros del evento pasado son válidos.
Ejemplo
export default {
emits: {
submit: (payload) => {
if (typeof payload === 'string') {
return true;
} else {
console.warn('Submit event payload must be a string!');
return false;
}
}
},
methods: {
handleClick() {
this.$emit('submit', 'Form submitted!');
}
}
}
</script>
En este ejemplo,submitla función de validación del evento verifica sipayloades una cadena. Si no lo es, se mostrará un mensaje de advertencia en la consola.
3. Uso combinado con v-model
emitsEl atributo se utiliza a menudo junto conv-modelv-model, especialmente para manejar el enlace bidireccional en componentes personalizados.
Ejemplo
<input :value="modelValue" @input="updateValue" />
</template>
<script>
export default {
props: ['modelValue'],
emits: ['update:modelValue'],
methods: {
updateValue(event) {
this.$emit('update:modelValue', event.target.value);
}
}
}
</script>
En este ejemplo, cuando el valor del campo de entrada cambia, se emite elupdate:modelValueevento, y el nuevo valor se pasa al componente padre.
Notas
- Mayúsculas y minúsculas en nombres de eventos: Los nombres de eventos en Vue no distinguen entre mayúsculas y minúsculas, pero se recomienda usar la convención de nomenclatura kebab-case (separada por guiones).
- Valor de retorno de la función de validación: si la función de validación devuelve
false, Vue emitirá una advertencia en modo desarrollo, pero el evento aún se emitirá. - Eventos predeterminados: Algunos eventos nativos (como
click) no necesitan estaremitsdeclarados, a menos que necesites validar sus parámetros.
Otras extensiones
API de opciones de Vue3