#laravel-8 #laravel-livewire
Вопрос:
Есть ли в Laravel Livewire функция, которая позволяет передавать свойство value html-элемента (будь то переключатель, флажок, выпадающий список или текстовое поле) в функцию?
Например: у меня на странице есть список. Этот список состоит из различных приготовленных блюд. Я выбираю блюдо из списка, нажав на него, и значение передается. Может ли это значение быть передано в функцию?
Контроллер LiveWire
<?php
namespace AppHttpLivewire;
use LivewireComponent;
class Dishes extends Component
{
public function showRecipe($value)
{
//query database or some conditional logic
}
public function render()
{
return view('livewire.dishes')
}
}
Компонент LiveWire
<div>
<ul>
<li value="pizza" wire:click="showRecipe(this.value)">Pizza</li>
<li value="cherry_pie" wire:click="showRecipe(this.value)">Cherry Pie</li>
<li value="beef_stronganoff" wire:click="showRecipe(this.value)">Beef Stroganoff</li>
<li value="caesar_salad" wire:click="showRecipe(this.value)">Caesar Salad</li>
<li value="lobster_newburg" wire:click="showRecipe(this.value)">Lobster Newburg</li>
</ul>
</div>
Ответ №1:
value
не является допустимым атрибутом <li>
тега. Однако вы можете поставить метку привязки с действием «запретить по умолчанию» или просто сохранить wire:click
li
ее и передать данные непосредственно методу.
<div>
<ul>
<li wire:click="showRecipe('pizza')">Pizza</li>
<li wire:click="showRecipe('cherry_pie')">Cherry Pie</li>
<li wire:click="showRecipe('beef_stronganoff')">Beef Stroganoff</li>
<li wire:click="showRecipe('caesar_salad')">Caesar Salad</li>
<li wire:click="showRecipe('lobster_newburg')">Lobster Newburg</li>
</ul>
</div>
Если вы создаете это в цикле с помощью PHP/blade, вам следует использовать wire:key
его. Ключ должен быть чем-то уникальным, чтобы Livewire мог отслеживать каждую отдельную запись.
<div>
<ul>
@foreach([
'pizza' => 'Pizza',
'cherry_pie' => 'Cherry Pie',
'beef_stronganoff' => 'Beef Stroganoff',
'caesar_salad' => 'Caesar Salad',
'lobster_newburg' => 'Lobster Newburg',
] as $value=>$name)
<li wire:key="dish-{{ $loop->index }}" wire:click="showRecipe('{{ $value }}')">{{ $name }}</li>
@endforeach
</ul>
</div>