Гид по технологиям

Привязка событий в Vue: v-on, @ и модификаторы

5 min read Vue.js Обновлено 21 Dec 2025
Привязка событий в Vue: v-on и модификаторы
Привязка событий в Vue: v-on и модификаторы

Смартфон на ноутбуке, лежащем на коричневом деревянном столе

Что такое привязка событий в Vue?

Привязка событий — это механизм Vue.js, который позволяет навесить слушатель событий на элемент DOM. Когда событие происходит (например, клик или нажатие клавиши), Vue вызывает выражение или метод, связанный с этим событием.

В Vue для привязки событий используется директива v-on. Её можно читать как «подпиши на событие». Для частого использования есть синтаксический сахар — символ @, который заменяет v-on.

Короткое определение: v-on — директива Vue для привязки DOM‑событий к выражениям или методам компонента.

Базовый пример привязки события click

Пример Vue 3 с v-on, который увеличивает счётчик при клике на кнопку:



  


  

{{ counter }}

Здесь выражение counter++ привязано к событию click через v-on. Эквивалент с сокращением @ выглядит так:

Привязка других событий и модификаторов клавиш

Не только click доступен для привязки. Вы можете использовать любые DOM‑события, например mouseover, keydown и др. Vue также поддерживает модификаторы клавиш, например .enter:

В этом примере выражение выполнится только при нажатии клавиши Enter, когда элемент в фокусе.

Связывание событий с методами

В практике чаще используют методы для более сложной логики. Методы определяются в объекте methods и вызываются из обработчиков событий:



  


  

{{ counter }}

Передача аргументов в методы

Чтобы передать аргументы, вызовите метод с параметром в обработчике:


  

{{ counter }}

Это позволяет гибко управлять поведением компонентов через параметры.

Модификаторы событий: prevent и stop

Модификаторы событий в Vue — это короткий способ изменить поведение события без написания дополнительного кода. Модификаторы цепляются к событию через точку.

  • prevent — предотвращает действие по умолчанию (event.preventDefault()). Чаще используется на формах, чтобы отменить перезагрузку страницы при submit.
  • stop — останавливает всплытие события (event.stopPropagation()).

Пример prevent:

Пример stop и иллюстрация всплытия событий:


    

Дополнительные CSS‑стили, чтобы было проще визуально понять структуру:


    

Vue-приложение с кнопкой Click me на чёрно‑белом фоне

Когда вы кликаете на кнопку, сработают buttonClick и innerClick, но outerClick не вызовется из‑за @click.stop на внутреннем блоке.

Частые сценарии и практические советы

  • Используйте выражения для простых действий (counter++), методы — для логики средней и высокой сложности.
  • Для формы чаще используйте @submit.prevent и затем вызывайте метод, который отправляет данные асинхронно.
  • Если нужно отменить всплытие, используйте .stop; если нужно предотвратить дефолтное поведение — .prevent. Модификаторы можно комбинировать: @click.stop.prevent.
  • Для клавиатурных сочетаний применяйте модификаторы клавиш (.enter, .esc, .left, .right и т.д.).

Отладка привязок событий — мини‑методика

  1. Откройте DevTools и убедитесь, что элемент присутствует в DOM.
  2. Проверьте консоль на ошибки Vue (например, ошибка вызова метода).
  3. Временно замените метод на console.log(…) чтобы убедиться, что событие срабатывает.
  4. Убедитесь, что элемент не перекрыт другим элементом (вопрос z-index / pointer-events).
  5. Если используете динамические компоненты или v-if, проверьте, что слушатель навешивается после рендера.

Когда привязка событий даёт сбои — типичные ошибки и контрпримеры

  • Ошибка «this is undefined» при использовании методов: в Options API this указывает на экземпляр Vue, но в стрелочных функциях this может быть унаследован из внешней области. Решение: используйте обычные функции для методов, а не стрелочные.
  • Обработчик не вызывается: элемент не в DOM или закрыт v-if; проверьте условие рендера.
  • Всплытие событий вызывает нежелательные эффекты на родителях: используйте .stop или проверяйте целевой элемент через event.target.
  • Выполнение дефолтных действий форм: забыли .prevent на submit.

Альтернативные подходы

  • Нативный addEventListener: полезно в тех случаях, когда нужно слушать события вне Vue (например, глобальные события на window). Требует ручного отписывания в destroy/unmounted.
  • Composition API + ref: в setup можно получить ссылку на элемент и навесить слушатель вручную при mount. Это даёт больше контроля, но требует больше кода.

Пример с addEventListener в setup:

import { onMounted, onBeforeUnmount, ref } from 'vue'

export default {
  setup() {
    const el = ref(null)
    function onScroll(e) { console.log('scroll', e) }
    onMounted(() => {
      window.addEventListener('scroll', onScroll)
    })
    onBeforeUnmount(() => {
      window.removeEventListener('scroll', onScroll)
    })
    return { el }
  }
}

Быстрая шпаргалка по синтаксису

  • v-on:event=”handler” или @event=”handler”
  • @click.prevent — отменяет default
  • @click.stop — останавливает всплытие
  • @keydown.enter — слушает Enter
  • Передача аргументов: @click=”method(5)”

Чек‑лист для разработчика

  • Используются методы для сложной логики
  • Простые выражения не перегружают шаблон
  • Для форм стоит использовать @submit.prevent
  • При использовании addEventListener реализовано снятие слушателей
  • Модификаторы применяются осознанно (.stop/.prevent)
  • Не используются стрелочные функции в methods

Роли — что проверяет ревьюер кода

  • Разработчик: правильность логики метода, отсутствие побочных эффектов.
  • Ревьюер: нет утечек слушателей, корректная обработка ошибок, читаемость.
  • QA: проверка сценариев клика, клавиатурных событий и форм.

1‑строчный глоссарий

  • v-on — директива для привязки событий.
  • @ — сокращение для v-on.
  • prevent — модификатор для event.preventDefault().
  • stop — модификатор для event.stopPropagation().

Критерии приёмки

  1. Все сценарии пользовательских событий работают корректно в UI.
  2. Нет ошибок в консоли при тестовых кликах и сабмитах.
  3. Никаких утечек слушателей при переключении маршрутов/компонентов.

Заключение

Привязка событий — базовая, но критичная часть интерактивных Vue‑приложений. Простые выражения подходят для мелких изменений состояния, методы — для бизнес‑логики, а модификаторы дают быстрый контроль над поведением событий. При необходимости использовать низкоуровневые слушатели — не забудьте об отписке и тестировании.

Важно: если требуется более тонкий контроль (например, делегирование событий в больших списках), рассмотрите комбинацию Vue‑шаблонов и нативных обработчиков через Composition API.

Вопросы и примеры вашего конкретного случая можно добавить в комментариях — я помогу адаптировать пример под ваш код.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как скрыть или показать пост в Facebook для конкретных людей
Социальные сети

Как скрыть или показать пост в Facebook для конкретных людей

Заблокировать профиль Chrome паролем
Безопасность

Заблокировать профиль Chrome паролем

Как начать вести влог — руководство для новичков
Влогинг

Как начать вести влог — руководство для новичков

Как зарабатывать Microsoft Rewards на Xbox
Гайды

Как зарабатывать Microsoft Rewards на Xbox

Buildbox: создать игру без кода
Game Development

Buildbox: создать игру без кода

Grammarly в клавиатуре Samsung — как включить
Мобильные

Grammarly в клавиатуре Samsung — как включить