РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
44 of 274 menu

Директива wire:loading.block

Директива wire:loading.block применяется к HTML-элементу и изменяет его отображение на блочное в момент выполнения асинхронных запросов к серверу. В отличие от обычной директивы wire:loading, которая сохраняет исходный тип отображения элемента, wire:loading.block принудительно устанавливает свойство display: block для элемента во время загрузки. Это особенно полезно для элементов, которые изначально имеют тип отображения inline или inline-block, но во время загрузки должны занимать всю доступную ширину родительского контейнера.

Синтаксис

<div wire:loading.block> Loading... </div>

Директива может использоваться как самостоятельно, так и в сочетании с модификатором target для указания конкретного метода или нескольких методов, во время выполнения которых элемент должен отображаться.

<div wire:loading.block target="saveData"> Saving... </div> <div wire:loading.block target="saveData, updateData"> Processing... </div>

Пример

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

<?php namespace App\Livewire; use Livewire\Component; class DataLoader extends Component { public $data = []; public $isLoading = false; public function loadData() { $this->isLoading = true; // Simulate delay sleep(2); $this->data = ['a', 'b', 'c', 'd', 'e']; $this->isLoading = false; } public function render() { return view('livewire.data-loader'); } } ?>
<div> <button wire:click="loadData">Load Data</button> <div wire:loading.block> Loading data, please wait... </div> <ul> @foreach ($data as $item) <li>{{ $item }}</li> @endforeach </ul> </div>

Результат выполнения кода:

<button>Load Data</button> <div style="display: block;">Loading data, please wait...</div> <ul> <li>a</li> <li>b</li> <li>c</li> <li>d</li> <li>e</li> </ul>

Пример

Теперь рассмотрим отличие wire:loading.block от обычной wire:loading. В этом примере у нас есть инлайн-элемент, который во время загрузки должен стать блочным для отображения полноценного сообщения:

<?php namespace App\Livewire; use Livewire\Component; class InlineElement extends Component { public $status = 'ready'; public function processData() { $this->status = 'processing'; sleep(3); $this->status = 'completed'; } public function render() { return view('livewire.inline-element'); } } ?>
<div> <button wire:click="processData">Process</button> <div> Status: <span wire:loading.block> ⏳ Processing... Please wait while data is being saved </span> <span wire:loading.remove> {{ $status }} </span> </div> </div>

Результат выполнения кода во время загрузки:

<button>Process</button> <div> Status: <span style="display: block;">⏳ Processing... Please wait while data is being saved</span> </div>

Пример

Использование wire:loading.block с модификатором target для отображения блочного индикатора только при выполнении конкретных методов:

<?php namespace App\Livewire; use Livewire\Component; class MultipleActions extends Component { public $result = 'ready'; public function fastAction() { $this->result = 'fast completed'; } public function slowAction() { sleep(2); $this->result = 'slow completed'; } public function render() { return view('livewire.multiple-actions'); } } ?>
<div> <button wire:click="fastAction">Fast</button> <button wire:click="slowAction">Slow</button> <div wire:loading.block target="slowAction"> ⏳ Performing slow operation... </div> <div> Result: {{ $result }} </div> </div>

Смотрите также

  • директиву wire:loading,
    которая управляет отображением элемента во время загрузки
  • директиву wire:loading.inline,
    которая устанавливает инлайн-отображение во время загрузки
  • директиву wire:loading.target,
    которая указывает методы, при выполнении которых отображается элемент
  • директиву wire:loading.delay,
    которая добавляет задержку перед отображением элемента загрузки
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить