# Opção emits
new
# Visão Geral
O Vue 3 agora oferece uma opção emits
, semelhante à opção props
existente. Esta opção pode ser usada para definir os eventos que um componente pode emitir para seu pai.
# Comportamento v2.x
No Vue 2, você pode definir as props que um componente recebe, mas não pode declarar quais eventos ele pode emitir:
<template>
<div>
<p>{{ text }}</p>
<button v-on:click="$emit('accepted')">OK</button>
</div>
</template>
<script>
export default {
props: ['text']
}
</script>
2
3
4
5
6
7
8
9
10
11
# Comportamento v3.x
Semelhante a props, os eventos que o componente emite agora podem ser definidos com a opção emits
:
<template>
<div>
<p>{{ text }}</p>
<button v-on:click="$emit('accepted')">OK</button>
</div>
</template>
<script>
export default {
props: ['text'],
emits: ['accepted']
}
</script>
2
3
4
5
6
7
8
9
10
11
12
A opção também aceita um objeto, que permite ao desenvolvedor definir validadores para os argumentos que são passados com o evento emitido, semelhante aos validadores nas definições de props
.
Para obter mais informações sobre isso, leia a documentação da API para este recurso.
# Estratégia de Migração
É altamente recomendado que você documente todos os eventos emitidos por cada um de seus componentes usando emits
.
Isso é especialmente importante por causa da remoção do modificador .native
. Quaisquer escutadores para eventos que não são declarados com emits
agora serão incluídos no $attrs
do componente, que por padrão será vinculado ao nó raiz do componente.
# Exemplo
Para componentes que reemitem eventos nativos para seus pais, isso agora levaria ao disparo de dois eventos:
<template>
<button v-on:click="$emit('click', $event)">OK</button>
</template>
<script>
export default {
emits: [] // sem evento declarado
}
</script>
2
3
4
5
6
7
8
Quando um pai escuta o evento click
no componente:
<my-button v-on:click="handleClick"></my-button>
agora seria acionado duas vezes:
- Uma vez de
$emit()
. - Uma vez de um escutador de evento nativo aplicado ao elemento raiz.
Aqui você tem duas opções:
- Declare corretamente o evento
click
. Isso é útil se você realmente adicionar alguma lógica a esse manipulador de eventos em<my-button>
. - Remova a reemissão do evento, pois o pai agora pode escutar o evento nativo facilmente, sem adicionar
.native
. Adequado quando você realmente apenas reemite o evento de qualquer maneira.