Wie kann man alle verschachtelten Komponenten erneut rendern?Php

PHP-Programmierer chatten hier
Anonymous
 Wie kann man alle verschachtelten Komponenten erneut rendern?

Post by Anonymous »

Ich habe eine verschachtelte Suchauswahlkomponente implementiert, indem ich einen Flusseingang mit einer Dropdown-Datei zur Anzeige der Datenbankergebnisse verwendet habe.

Code: Select all



@if (!empty($items))
[list]            class="absolute z-50 w-full mt-[.3125rem] bg-white dark:bg-zinc-700 border border-zinc-200 dark:border-zinc-600 rounded-lg shadow-xs max-h-[20rem] overflow-y-auto scroll-py-[.3125rem] transition-all"
x-show="open"
x-transition
>
@foreach ($items as $item)
[*]                    wire:key="{{$item['id']}}"
class="px-[.3125rem] py-[.3125rem] text-sm text-gray-800 dark:text-white hover:bg-gray-100 dark:hover:bg-zinc-700 cursor-pointer transition"
wire:click="select({{ $item['id'] }})"
@click="open = false"
>
{{ $item['name'] }}

@endforeach
[/list]
@endif

< /code>
seine Komponentenklasse: < /p>
class SearchSelect extends Component
{
public string $model;
public string $search_select = '';
public string $initial_string = '';
public string $label = '';
public string $placeholder = '';
public string $error_name = 'id';
public $selectedId = null;
public array $items = [];

public function updatedSearchSelect()
{
$this->loadItems();
}

public function mount(string $model, string $label = '', string $error_name = 'id', string $placeholder = '')
{
$this->model = $model;
$this->label = $label;
$this->placeholder = empty($placeholder) ? __('action.search') : $placeholder;
$this->error_name = $error_name;
$this->search_select = $this->initial_string;
$this->loadItems();
}

public function loadItems(): void
{
$class = app($this->model);
$query = $class::query();

if ($this->search_select) {
$query->where(function ($q) {
// If model is User, allow searching by first/last name
if (Str::contains($this->model, 'User')) {
$q->orWhere('first_name', 'like', "%{$this->search_select}%")
->orWhere('last_name', 'like', "%{$this->search_select}%")
->orWhere('national_id', 'like', "%{$this->search_select}%")
->orWhere('phone', 'like', "%{$this->search_select}%");
}
else
{
$q->where('name', 'like', "%{$this->search_select}%");
}
});
}

$this->items = $query->orderByDesc('id')->limit(10)->get()->map(function ($item) {
return [
'id' => $item->id,
'name' =>  $this->formatLabel($item)
];
})->toArray();
}

public function select($id): void
{
$this->selectedId = $id;
$this->search_select = $this->formatLabel(app($this->model)::find($id));
$this->dispatch('itemSelected', id: $id, label:$this->search_select);
}

private function formatLabel($item): string
{
if (Str::contains($this->model, 'User')) {
return "{$item->first_name} {$item->last_name}";
}

return $item->name ?? 'Unknown';
}

public function render()
{
return view('livewire.components.search-select');
}
}
< /code>
Auf einer Spielstationenseite in einer Schleife öffnet die "Start" der einzelnen Zeile ein eindeutiges Modal, das diese Suchauswahlkomponente enthält, die so implementiert ist: < /p>
    
< /code>
Komponentenklasse mit Listener: < /p>
    protected $listeners = ['itemSelected'];
public function itemSelected($id, $label): void
{
$this->member_id[] = $id;
$this->searchBoxValue = $label;
}
Nach einer Benutzerauswahl in der Schaltfläche Modal und nachfolgende "Start" wird die Funktion startSession aufgerufen. Ich muss Daten speichern und die Komponente ohne Auffrischung von Seite zurücksetzen. Um die verschachtelte Komponente zu aktualisieren, aktualisiere ich auch ihren Schlüssel: $ this-> searchboxkey = str :: random (10); . Dies führt jedoch zu dem Livewire -Fehler: "Uncornd Snapshot fehlt bei der Livewire -Komponente mit ID: 8TWFVMS3S7stbuyxdvq9".

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post