如何仅将加载状态应用于 livewire 中的特定组件

Yog*_*ogi 8 php laravel laravel-livewire

我在我的项目中使用 Laravel Livewire,我wire:loading用于在单击时加载状态。我在 foreach 循环中迭代了所有任务,但加载状态适用于所有组件。这是代码。

在此处输入图片说明

刀片文件

GitLab:https ://gitlab.com/tasklog/tasklog/-/blob/master/resources/views/livewire/home/tasks.blade.php

<button type="button" wire:click="togglePraise({{ $task->id }}, {{ $task->user->id }})">
    
    <span class="small text-black-50 font-weight-bold">
        {{ $task->task_praise->count() }}
    </span>
    <div wire:loading wire:target="togglePraise">
        Processing...
    </div>
</button>
Run Code Online (Sandbox Code Playgroud)

控制器文件

GitLab:https ://gitlab.com/tasklog/tasklog/-/blob/master/app/Http/Livewire/Home/Tasks.php

public function togglePraise($id, $user_id)
{
    if (Auth::check()) {
        if (Auth::user()->id === $user_id) {
            session()->flash('message', 'Forbidden!');

            return;
        }
        $isPraised = TaskPraise::where([
            ['user_id', Auth::user()->id],
            ['task_id', $id],
        ])->count();
        if ($isPraised === 1) {
            TaskPraise::where([
                ['user_id', Auth::user()->id],
                ['task_id', $id],
            ])->delete();

            return true;
        } else {
            TaskPraise::create([
                'task_id' => $id,
                'user_id' => Auth::user()->id,
            ]);

            return true;
        }
    } else {
        return session()->flash('message', 'Forbidden!');
    }
}
Run Code Online (Sandbox Code Playgroud)

Fah*_*sri 4

我知道这个问题是在 v2 发布之前提出的,但添加了 v2 的答案以供参考。

根据Livewire 文档,如果您使用的是 v2,您可以在wire:target 指令中指定操作及其参数。对于你的例子,它会是这样的:

wire:target="togglePraise({{ $task->id }}, {{ $task->user->id }})"
Run Code Online (Sandbox Code Playgroud)