【问题标题】:laravel livewire delete record renders only after page refreshlaravel livewire 删除记录仅在页面刷新后呈现
【发布时间】:2021-06-16 09:33:32
【问题描述】:

这是我从数据库中删除搜索记录的功能。我希望在不刷新页面的情况下呈现数据库更改。那就是我使用livewire。但是点击删除后,页面只有在刷新后才会更新。 dd 结果不显示更新的结果。

public function deleteSearch($search) {
    $empsearch = Auth::user()->mySearches->find($search);
    $empsearch->delete();
    $this->skills = Auth()->user()->mySearches;
    dd($this->skills);
}

刀片文件

@if (count($skills) > 0)
    @foreach ($skills as $search)
        <div class="el-tag" >
            <a href="/search?query={{ $search->name }}">
                {{ $search->name }}
            </a>
            |
            <a onclick="return confirm('Are you sure?')" wire:click.prevent="deleteSearch({{ $search->search_id }})" >
                <i class="pl-1 icon el-icon-delete"></i>
            </a>
        </div>
    @endforeach
@endif

这些是安装和渲染方法

public $preference;
public $skills;

public function mount($preference) {
    $this->preference = $preference;
    $this->skills = Auth()->user()->mySearches;
}

public function render() {
    return view('livewire.preferences');
}

【问题讨论】:

  • 你能提供你的组件的刀片文件吗?
  • @Peppermintology 请检查我的刀片文件。谢谢
  • 你使用的是什么版本的 livewire 1x 或 2x

标签: laravel page-refresh laravel-livewire


【解决方案1】:

在渲染方法中,return 语句返回完整的 HTML DOM(即 return view('livewire.preferences') ),因此更改仅在页面刷新/重新加载后发生/反映。

解决方案:-

  1. 借助 ajax 发出删除请求
  2. 然后在 ajax 请求成功后,更新主要的 DOM(即正文部分),以便在不刷新页面的情况下反映更改。

【讨论】:

  • vishal,我在学习 laravel 的初期阶段,我真的不知道在 ajax 的帮助下请求这些术语。而且因为 livewire 会实时更新,所以我认为它可以简单地反映变化。
【解决方案2】:

在删除语句后尝试这个从记录中获取新数据

$this->skills = Auth()->user()->mySearches->refresh();

更新 好吧,也许只能这样:

$this->skills->refresh();

【讨论】:

  • 我收到了这个错误。方法 Illuminate\Database\Eloquent\Collection::refresh 不存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 1970-01-01
  • 2016-12-24
  • 1970-01-01
  • 2017-05-03
  • 2016-11-17
  • 1970-01-01
相关资源
最近更新 更多