Ой, ничего не найдено!

К сожалению, по вашему запросу пока ничего нет (но это только пока!), зато вы можете подписаться на нашу замечательную email-рассылку, чтобы не пропустить самое интересное в будущем.

  • 625

Работа с событиями в Livewire

В Livewire предусмотрена мощная система событий, позволяющая взаимодействовать между компонентами страницы. Поскольку под капотом используются обычные браузерные события, вы можете легко связывать компоненты Livewire, Alpine.js и даже чистый JavaScript.

Генерация событий

Чтобы отправить событие из компонента Livewire, используйте метод dispatch(), передавая название события и, при необходимости, дополнительные данные:

use Livewire\Component;

class CreatePost extends Component
{
    public function save()
    {
        // ваш код сохранения...

        $this->dispatch('post-created');
    }
}

Можно передавать дополнительные данные вторым параметром:

$this->dispatch('post-created', title: $post->title);

Прослушивание событий

Для того, чтобы прослушивать событие, используйте атрибут #[On] над методом вашего компонента:

use Livewire\Component;
use Livewire\Attributes\On;

class Dashboard extends Component
{
    #[On('post-created')]
    public function updatePostList($title)
    {
        // обновите список постов...
    }
}

Метод updatePostList будет вызван, когда произойдёт событие post-created.

Динамические названия событий

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

$this->dispatch("post-updated.{$post->id}");
Подключение за минуту
Попробуйте Siteko.net бесплатно в течение месяца
Проверьте хостинг на реальном сайте: скорость, стабильность и поддержка доступны сразу после подключения.
Начать бесплатно

И слушать это событие так:

#[On('post-updated.{post.id}')]
public function refreshPost()
{
    // Обновите конкретный пост...
}

Прослушивание событий от дочерних компонентов

В Blade-шаблоне можно указать прослушивание событий от конкретного дочернего компонента:

<livewire:edit-post @saved="$refresh">

Или вызвать конкретный метод:

<livewire:edit-post @saved="close">

С передачей данных:

<livewire:edit-post @saved="close($event.detail.postId)">

Взаимодействие с JavaScript

Livewire позволяет работать с событиями через JavaScript напрямую в компонентах:

@script
<script>
    $wire.on('post-created', () => {
        // JavaScript-логика...
    });
</script>
@endscript

Отправка события через JS:

@script
<script>
    $wire.dispatch('post-created', { refreshPosts: true });
</script>
@endscript
1 месяц бесплатно
Запустите сайт на Siteko.net без стартовых затрат
Быстрый хостинг, понятная панель и поддержка рядом с первого дня. Тестовый месяц доступен сразу после выбора тарифа.
Выбрать хостинг

Доступ к данным события в JS:

$wire.on('post-created', (event) => {
    let refreshPosts = event.detail.refreshPosts;
    // ...
});

Глобальные JS-события

Прослушивать события глобально можно через Livewire.on:

document.addEventListener('livewire:init', () => {
    Livewire.on('post-created', (event) => {
        // ...
    });
});

Использование с Alpine.js

Прослушивание событий Livewire в Alpine.js:

<div x-on:post-created="..."></div>

Глобально:

<div x-on:post-created.window="..."></div>

Отправка события из Alpine.js:

<button @click="$dispatch('post-created', { title: 'Post Title' })">Создать пост</button>

Напрямую без событий

Если необходимо вызвать родительский метод из дочернего компонента без событий:

<button wire:click="$parent.showCreatePostForm()">Создать пост</button>
Первый месяц за 0 рублей
Хостинг для сайта, который должен работать стабильно
Перенесите проект или запустите новый сайт на Siteko.net и протестируйте сервис без предоплаты.
Перейти к хостингу

Направленное отправление событий

Отправить событие непосредственно другому компоненту:

$this->dispatch('post-created')->to(Dashboard::class);

Событие самому себе:

$this->dispatch('post-created')->self();

Из Blade-шаблона:

<button wire:click="$dispatch('show-post-modal', { id: {{ $post->id }} })">Редактировать</button>

Или направленное событие:

<button wire:click="$dispatchTo('posts', 'show-post-modal', { id: {{ $post->id }} })">Редактировать</button>

Тестирование событий

Тестирование отправки события:

Livewire::test(CreatePost::class)
    ->call('save')
    ->assertDispatched('post-created');

Тестирование прослушивания события:

Livewire::test(Dashboard::class)
    ->assertSee('Posts created: 0')
    ->dispatch('post-created')
    ->assertSee('Posts created: 1');
Первый месяц за 0 рублей
Хостинг для сайта, который должен работать стабильно
Перенесите проект или запустите новый сайт на Siteko.net и протестируйте сервис без предоплаты.
Перейти к хостингу

Работа с Laravel Echo

Использование реального времени с Laravel Echo:

#[On('echo:orders,OrderShipped')]
public function notifyNewOrder()
{
    $this->showNewOrderNotification = true;
}

С динамическими каналами:

public function getListeners()
{
    return [
        "echo:orders.{$this->order->id},OrderShipped" => 'notifyShipped',
    ];
}

Используя приватные и присутствующие каналы:

"echo-private:orders,OrderShipped" => 'notifyNewOrder',
"echo-presence:orders,here" => 'notifyNewOrder',

Теперь вы знаете, как эффективно использовать систему событий в Livewire для интерактивного взаимодействия компонентов в вашем приложении.

Первый месяц бесплатно

Хостинг Siteko.net для стабильного запуска сайта

Разместите проект на Siteko.net и проверьте скорость, панель управления и поддержку без стартовой оплаты.

  • 1 месяц бесплатно для новых клиентов сразу после выбора тарифа.
  • Быстрый старт для лендинга, блога или корпоративного сайта.
  • Поддержка рядом поможет с переносом и настройкой проекта.
Выбрать тариф