# $listeners
removido
breaking
# Visão Geral
O objeto $listeners
foi removido no Vue 3. Os escutadores de eventos agora fazem parte do $attrs
:
{
text: 'este é um atributo',
onClose: () => console.log('Evento close acionado')
}
2
3
4
# Sintaxe v2.x
No Vue 2, você pode acessar atributos passados para seus componentes com this.$attrs
, e escutadores de eventos com this.$listeners
.
Em combinação com inheritAttrs: false
, eles permitem que o desenvolvedor aplique esses atributos e escutadores a algum outro elemento em vez do elemento raiz:
<template>
<label>
<input type="text" v-bind="$attrs" v-on="$listeners" />
</label>
</template>
<script>
export default {
inheritAttrs: false
}
</script>
2
3
4
5
6
7
8
9
10
# Sintaxe v3.x
No DOM virtual do Vue 3, os escutadores de eventos agora são apenas atributos, prefixados com on
, e como tal são parte do objeto $attrs
, então $listeners
foi removido.
<template>
<label>
<input type="text" v-bind="$attrs" />
</label>
</template>
<script>
export default {
inheritAttrs: false
}
</script>
2
3
4
5
6
7
8
9
10
Se este componente recebeu um atributo id
e um escutador v-on:close
, o objeto $attrs
agora ficará assim:
{
id: 'my-input',
onClose: () => console.log('Evento close acionado')
}
2
3
4
# Estratégia de Migração
Remova todos os usos de $listeners
.
Sinalizador na compilação de migração: INSTANCE_LISTENERS