Livewire відстежує, чи відрізняється стан у браузері від стану на сервері. Форма, в якій користувач щось змінив, але це ще не відправлено, вважається «брудною» (dirty).
wire:dirty показує елемент лише тоді, коли є незбережені зміни:
<form wire:submit="update">
<input wire:model="title">
<textarea wire:model="content"></textarea>
<div wire:dirty class="text-amber-600">Є незбережені зміни</div>
<button type="submit">Зберегти</button>
</form>
Щойно користувач почав вводити - повідомлення з'являється; після відправки форми й синхронізації з сервером - зникає.
Варіанти:
wire:dirty.remove- навпаки: показувати елемент, доки змін немає («Усе збережено»);wire:dirty.class="border-amber-500"- додати клас замість показу елемента;wire:target="title"- стежити лише за конкретною властивістю:
<input wire:model.live.blur="title" wire:dirty.class="border-amber-500" wire:target="title">
$dirtyу виразах і$wire.$dirty('email')в Alpine - перевірити програмно:
<button x-bind:disabled="! $wire.$dirty()">Зберегти</button>
Кнопка «Зберегти» активна лише тоді, коли є що зберігати.
Що важливо розуміти: «чисто» означає «синхронізовано із сервером», а не «збережено в базу». Якщо поле з wire:model.live уже відправило значення на сервер, а метод збереження ще не викликано, wire:dirty уже не покаже змін. Для форм, де важливо саме збереження в базу, стан «змінено» краще вести явно (наприклад, порівнювати з початковими значеннями).
Корисне доповнення: попередження при спробі піти зі сторінки з незбереженими змінами - обробник beforeunload в Alpine, що перевіряє $wire.$dirty().