Отправка события в Livewire
Пусть на странице рядом стоят два блока, и нажатие в одном должно отозваться в другом. Общей обёртки с нужной логикой у них нет: каждый блок собран отдельно. Передавать между ними чужое значение неудобно, потому что они не вложены друг в друга.
Компонент может сообщить странице,
что произошло действие, через
метод dispatch.
Событие уходит компонентам на
этой же странице, которые его
ждут. Само по себе нажатие
кнопки их не меняет: они
реагируют, только если ждут
этот сигнал.
Давайте сделаем страницу
/notify с компонентом
Notifier:
php artisan make:livewire Notifier --class
Давайте добавим маршрут:
<?php
Route::get('/notify', function () {
return view('notify');
});
?>
Страница вставит компонент:
<x-layout>
<livewire:notifier />
</x-layout>
В классе Notifier добавим
метод, который шлёт событие
ping:
<?php
namespace App\Livewire;
use Livewire\Component;
class Notifier extends Component
{
public function ping()
{
$this->dispatch('ping');
}
public function render()
{
return view('livewire.notifier');
}
}
?>
Давайте повесим вызов метода на кнопку в шаблоне:
<div>
<button type="button" wire:click="ping">
Send
</button>
</div>
Создайте компонент Alarm
с кнопкой. По нажатию сообщите
остальным компонентам страницы,
что кнопка нажата.