Skip to content

$listeners видалено
несумісно

Огляд

Об'єкт $listeners було видалено у Vue 3. Слухачі подій тепер є частиною об'єкта $attrs:

js
{
  text: 'Це атрибут.',
  onClose: () => console.log('Подію "close" було викликано.')
}

2.x Синтаксис

У Vue 2 ви можете отримати доступ до атрибутів, що передаються вашим компонентам, за допомогою this.$attrs, а до слухачів подій за допомогою this.$listeners. У поєднанні з inheritAttrs: false вони дозволяють розробнику застосувати ці атрибути і слухачі до якогось іншого елемента замість кореневого:

html
<template>
  <label>
    <input type="text" v-bind="$attrs" v-on="$listeners" />
  </label>
</template>
<script>
  export default {
    inheritAttrs: false
  }
</script>

3.x Синтаксис

У віртуальному DOM Vue 3 слухачі подій тепер є просто атрибутами з префіксом on, і як такі є частиною об'єкта $attrs, тому $listeners було видалено.

vue
<template>
  <label>
    <input type="text" v-bind="$attrs" />
  </label>
</template>
<script>
export default {
  inheritAttrs: false
}
</script>

Якщо цей компонент отримав атрибут id і слухач v-on:close, об'єкт $attrs тепер матиме такий вигляд:

js
{
  id: 'my-input',
  onClose: () => console.log('Подію "close" було викликано.')
}

Стратегія міграції

Видаліть усі використання $listeners.

Migration build flag: INSTANCE_LISTENERS

Дивіться також