Перейти к содержимому

$dispatch

$dispatch — полезное сокращение для диспетчеризации событий браузера.

<div x-data @notify="alert('Привет, мир!')">
<button @click="$dispatch('notify')">Уведомить</button>
</div>

При желании вместе с отправляемым событием можно передать и данные. Эти данные будут доступны как свойство .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.

Проверка знаний

Правильный вариант использования событий в этом коде…