如何解决Laravel Livewire wire:click() 删除组件属性?
你好,stackoverflowers,
在深入研究 Laravel8 Livewire 功能时,我反复遇到以下问题。在名为 Ticker 的 Livewire 组件中,我将日历表中的一系列日期数据读入组件属性 $days
。
在我看来,我使用 $days
为 wire:click
的每个元素显示一个 div 元素,该元素应该连接到组件的 tick() 方法。
视图呈现和安装正常,但每次单击元素时,都会出现 "Trying to get property 'id' of non-object $day->id"
错误 - 好像 $days
属性已被方法调用删除或清空。谁能帮助我理解这种行为?
组件 Ticker.php:
class Counter extends Component
{
public $days;
public function mount()
{
$this->days = \DB::table("caldays")->WhereBetween("id",[320,326])->get();
}
public function render()
{
return view('livewire.ticker');
}
public function tick($id)
{
/* do stuff with selected $id */
}
}
查看ticker.blade.php:
...
@foreach($days as $day)
<div class="border border-light-blue-500 border-opacity-75 p-6 text-center"
wire:click="tick({{ $day->id }})"
>
@endforeach
...
提前多谢,祝您新年快乐,保持健康!
解决方法
你必须注意这一点。删除您各自的日期后,无论如何都不会更新您的收藏。因此,删除后您必须重新查询日期。或者只需从您的集合中删除相应的日期。 试试这个:
@forelse($days as $day)
<div class="border border-light-blue-500 border-opacity-75 p-6 text-center"
wire:click="tick({{ $day->id }})"
>
@empty
<p>No day found</p>
@endforelse
另一种解决方案是:
@if(count($days>0)
@foreach($days as $day)
<div class="border border-light-blue-500 border-opacity-75 p-6 text-center"
wire:click="tick({{ $day->id }})"
>
@endforeach
@endif
在php文件中:
public function tick($dayId){
$day = \DB::table("caldays")->Where("id",$dayId)->get();
$day->delete();
if(in_array($dayId,$this->days)) {
$key = array_search($dayId,$this->days);
array_splice($this->days,$key,1);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。