<div x-data @notify="alert('Привет, мир!')"> <button @click="$dispatch('notify')">Уведомить</button></div>
$dispatch
$dispatch
— полезное сокращение для диспетчеризации событий браузера.
При желании вместе с отправляемым событием можно передать и данные. Эти данные будут доступны как свойство .detail
события:
<div x-data @notify="alert($event.detail.message)"> <button @click="$dispatch('notify', { message: 'Привет, мир!' })"> Уведомить </button></div>
Под капотом $dispatch
представляет собой обёртку для более подробного API: element.dispatchEvent(new CustomEvent(...))
.
Отправка другим компонентам
Вы также можете воспользоваться предыдущим методом, чтобы заставить ваши компоненты взаимодействовать друг с другом:
Пример:
<div x-data="{ title: 'Привет' }" @set-title.window="title = $event.detail"> <h1 x-text="title"></h1></div>
<div x-data> <button @click="$dispatch('set-title', 'Привет, мир!')">Нажми меня</button></div><!-- При нажатии содержимое h1 получит текст «Привет, мир!». -->
Диспетчеризация в x-model
Вы также можете использовать $dispatch()
для запуска обновления данных для привязок x-model
. Например:
<div x-data="{ title: 'Привет' }"> <span x-model="title"> <button @click="$dispatch('input', 'Привет, мир!')">Нажми меня</button> <!-- После нажатия кнопки `x-model` перехватит всплывающее событие ввода и обновит заголовок. --> </span></div>
Это открывает возможности для создания пользовательских компонентов ввода, значение которых можно установить с помощью x-model
.
Проверка знаний
Правильный вариант использования событий в этом коде…