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

Перетаскивание списка в Livewire

Пусть на странице три заголовка поста стоят столбиком, а переставить их мышью нельзя: порядок задаёт массив в PHP, и без запроса к серверу строки не сдвигаются.

Атрибут wire:sort вешают на список и указывают метод, который Livewire вызовет после перетаскивания. Так браузер показывает движение, а сервер может запомнить порядок.

Страница откроется по адресу /posts/order. Давайте создадим компонент PostOrder:

php artisan make:livewire PostOrder --class

Давайте заведём массив заголовков в свойстве:

<?php namespace App\Livewire; use Livewire\Component; class PostOrder extends Component { public $titles = [ 1 => 'News', 2 => 'Note', 3 => 'Draft', ]; public function handleSort($id, $position) { $title = $this->titles[$id]; unset($this->titles[$id]); $order = array_values( array_keys($this->titles) ); array_splice( $order, $position, 0, [$id] ); $sorted = []; foreach ($order as $key) { $sorted[$key] = ($key === $id) ? $title : $this->titles[$key]; } $this->titles = $sorted; } public function render() { return view('livewire.post-order'); } } ?>

Давайте выведем список с wire:sort, а у каждого пункта отметим элемент и ключ для Livewire:

<div> <ul wire:sort="handleSort"> @foreach ($titles as $id => $title) <li wire:key="{{ $id }}" wire:sort:item="{{ $id }}" > {{ $title }} </li> @endforeach </ul> </div>

Без wire:sort:item и wire:key перетаскивание на экране может не сработать: фреймворк не поймёт, какая строка куда переехала. Давайте добавим маршрут и страницу:

<?php Route::get('/posts/order', function () { return view('posts-order'); }); ?>
<x-layout> <livewire:post-order /> </x-layout>

Создайте компонент EmployeeOrder. Строки имён работников можно переставить мышью, и новый порядок остаётся.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить