<div x-data="{ mypreloader2: false }" x-on:hide-preloader.window="mypreloader2 = false">
</div>
@script
<script data-navigate-once>
$wire.on('hide-preloader', (getdata) => {
window.dispatchEvent(new CustomEvent('hide-preloader'))
}, {
once: true
});
</script>
@endscript
Here is the full explanation in simple terms so you understand exactly what each part does.
โ 1. Alpine Component
<div x-data="{ mypreloader2: false }" x-on:hide-preloader.window="mypreloader2 = false"> </div>
๐ What this means:
x-data="{ mypreloader2: false }"
- This creates an Alpine component.
- It has one variable:
mypreloader2 = false- This variable controls whether the preloader is shown or hidden.
x-on:hide-preloader.window="mypreloader2 = false"
- This tells Alpine:
“When a browser event named hide-preloader is fired, set
mypreloader2 = false.”
Why .window?
- It listens at the window level.
- This allows events dispatched from outside Alpine (like from Livewire) to be caught.
So when the browser receives:
window.dispatchEvent(new CustomEvent('hide-preloader'))
โ Alpine will run:
mypreloader2 = false
โ preloader hides.
โ 2. Script Section
@script <script data-navigate-once> $wire.on('hide-preloader', (getdata) => { window.dispatchEvent(new CustomEvent('hide-preloader')) }, { once: true }); </script> @endscript
๐ What this means:
$wire.on('hide-preloader', ...)
- This listens for Livewire event from your backend.
- Example:
$this->dispatch('hide-preloader');
When Livewire receives that, it triggers this JavaScript function.
window.dispatchEvent(new CustomEvent('hide-preloader'))
- This sends a browser event called hide-preloader.
- Alpine is already listening for this event (from step 1).
So it becomes:
- Laravel (backend) dispatches โ Livewire event
- Livewire event triggers โ JavaScript
- JavaScript broadcasts โ browser event
- Alpine receives โ mypreloader2 = false
- Preloader hides
๐ง Summary (Easy Version)
Backend โ Frontend โ Alpine
| Step | Who sends? | Who receives? | What happens? |
|---|---|---|---|
| 1 | Laravel | Livewire JS | dispatch('hide-preloader') |
| 2 | Livewire JS | Browser | window.dispatchEvent(new CustomEvent(...)) |
| 3 | Browser | Alpine | x-on:hide-preloader.window="mypreloader2 = false" |
| 4 | Alpine | UI | Preloader hidden |
Leave a Reply