События
Alpine позволяет легко прослушивать события браузера и реагировать на них.
Прослушивание простых событий
Используя x-on
, можно прослушивать события браузера, отправляемые на элемент или внутри него.
Вот базовый пример прослушивания нажатия на кнопку:
В качестве альтернативы можно использовать сокращённый синтаксис: @
. Приведём тот же пример, что и раньше, но с использованием сокращённого синтаксиса (который мы будем использовать в дальнейшем):
Помимо click
, можно прослушивать любое событие браузера по имени. Например: @mouseenter
, @keyup
и т. д. являются допустимым синтаксисом.
Прослушивание определённых клавиш
Допустим, вы хотите перехватить нажатие клавиши Enter
внутри элемента <input>
. Alpine упрощает эту задачу, добавляя .enter
следующим образом:
Вы даже можете комбинировать модификаторы клавиш, чтобы прослушивать комбинации, например, нажатие Enter
при удержании Shift
:
Предотвращение поведения по умолчанию
При реагировании на события браузера часто необходимо «предотвратить поведение по умолчанию» (предотвратить поведение события браузера по умолчанию).
Например, если вы хотите прослушивать отправку формы, но запретить браузеру отправлять запрос формы, можно использовать .prevent
:
Вы также можете применить .stop
для достижения эквивалента event.stopPropagation()
.
Доступ к объекту события
Иногда вам может потребоваться доступ к собственному объекту событий браузера внутри вашего собственного кода. Чтобы упростить это, Alpine автоматически добавляет волшебную переменную $event
:
Отправка пользовательских событий
Помимо прослушивания событий браузера, вы также можете их отправлять. Это чрезвычайно полезно для связи с другими компонентами Alpine или запуска событий в инструментах за пределами Alpine.
Для этого Alpine предоставляет магический хелпер под названием $dispatch
:
Как вы можете видеть, при нажатии кнопки Alpine отправит событие браузера под названием «foo», а наш слушатель @foo
в <div>
отловит его и отреагирует.
Прослушивание событий в window
Из-за характера событий в браузере иногда полезно прослушивать события в объекте window
верхнего уровня.
Это позволяет вам полностью взаимодействовать между компонентами, как показано в следующем примере:
В приведённом выше примере, если мы нажмем кнопку в первом компоненте, Alpine отправит событие «foo». Из-за того, как события работают в браузере, они «проходят» через родительские элементы вплоть до window
верхнего уровня.
Теперь, поскольку в нашем втором компоненте мы прослушиваем «foo» (с .window
), при нажатии кнопки этот слушатель подхватит его и зарегистрирует сообщение «Событие foo было отправлено».
Проверка знаний
-
Какой из указанных вариантов синтаксиса неверен?
-
Как получить доступ к объекту события?
-
Как прослушивать пользовательские события?