Строка таблицы не удаляется с помощью Livewire

У меня создана динамическая строка, и я хочу удалить ее, но удаляются только данные из этой строки, а поля ввода не обновляются. Я использую Livewire для создания и удаления строки. Пользовательский интерфейс полей ввода не удаляется.

Я попробовал это, но это удалило данные только из строки.

Это код кнопки:

public function removeRow($index){
   array_splice($this->createChallanRequest['order_details'], $index, 1);
}
 

Что вы подразумеваете под «из строки удаляются только данные»? Также предоставьте соответствующий файл .blade.

Didwiz 16.04.2024 21:33

да, предоставьте фрагмент HTML, показывающий соответствующий ввод/строку

dfeva 16.04.2024 21:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
109
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я предполагаю, что вы используете цикл для отображения строк. Чтобы Livewire понимал, какие строки необходимо обновить в DOM, вам необходимо предоставить уникальный атрибут Wire:key для каждой строки:

@foreach ($users as $user)
    <div wire:key = "user-{{ $user->id }}">
        User name: {{ $user->name }}
    </div>
@endforeach

В этом примере я использовал идентификатор записи с префиксом (полезно, если у вас есть несколько списков на одной странице) в виде провода:ключ.

Если вы отображаете массив и у вас нет уникального идентификатора в строках, вы можете использовать индекс массива, но вы должны гарантировать, что он не будет переработан (ни при изменении строк, ни при их разбиении на страницы):

@foreach ($order_details as $key => $order_detail)

    <div wire:key = "prefix-{{ $key }}">
        .....
        
        <button wire:click = "removeRow({{ $key }})">
           DELETE
        </button>
    
    </div>

@endforeach

Поэтому, когда вы удаляете строку, вы не можете использовать для этой цели функцию splice(), поскольку она сжимает индексы. Вы можете использовать просто unset(), который удаляет строки, но оставляет индексы такими, какие они есть:

public function removeRow($index){ 
   // I assume that  $this->createChallanRequest  is a property
   unset ($this->createChallanRequest['order_details'][$index]);
}

Да, $this->createChallanRequest является общедоступной собственностью, но она удаляет из массива, и во внешнем интерфейсе остается пустая строка. Я использую js, чтобы удалить пустые поля спереди. Но после сохранения пустая строка снова отображается.

Ronak Jain 17.04.2024 22:12

Хорошо. Верна ли моя интерпретация точки зрения? Пустая строка все еще существует с использованием unset, как я показал? Для более точного ответа вам необходимо опубликовать код представления и класса.

TUPKAP 17.04.2024 22:36

Это решено. После отключения массива нам нужно снова обновить массив новыми данными, а также обновить номер индекса. unset($this->request['details'][$index]); $this->request['detail'] = array_values($this->request['detail']);

Ronak Jain 24.04.2024 14:52
Ответ принят как подходящий

После отключения массива нам нужно снова обновить массив новыми данными, а также обновить номер индекса.

unset($this->request['details'][$index]); 
$this->request['detail'] = array_values($this->request['detail'])

Он выглядит так же, как array_splice(), но более подробный.

TUPKAP 26.04.2024 07:11

Другие вопросы по теме