在 Livewire 中强制重新加载整页

Posted

技术标签:

【中文标题】在 Livewire 中强制重新加载整页【英文标题】:Force a full page reload in Livewire 【发布时间】:2021-02-28 14:51:39 【问题描述】:

我在 Laravel 8 中使用 LivewireAlpine

我有一个带有 Datatable (jQuery) 和 Bootstrap 模式的页面。 该表中填充了模型实例列表中的一些数据。 当我单击表格中的按钮时,它会打开模式并允许编辑相应的记录。 这部分按预期工作。

然而,Datatable 库更难与 Livewire 一起使用,所以我决定在 <div> 中使用 wire:ignore 属性来限定整个 Datatable . 因此,如果我想在修改后刷新 Datatable,我不能使用魔法 $refresh,因为 Datatable 目前在 @ 内987654324@.

所以我想在编辑完成后重新加载整个页面,但我不知道该怎么做,return redirect()->back() 不起作用...

这就是我的save 方法的样子,当从模态框编辑完成时会调用它:

public function save()

    MyModel::where('id', $this->edited_id)->update([...]);
    $this->clearSelection();
    return redirect()->back(); // This is not working

这是我的桌子:

<div wire:ignore>
    <table class="dt-table table">
        <thead>
            <tr>
                <th>Actions</th>
                <th>id</th>
                <th>name</th>
                <th>other</th>
            </tr>
        </thead>
        <tbody>
            @foreach ($models as $m)
                <tr>
                    <td>
                        <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#mymodal">Edit</button>
                    </td>
                    <td> $m->id </td>
                    <td> $m->name </td>
                    <td> $m->somedata </td>
                </tr>
            @endforeach
        </tbody>
    </table>
</div>

【问题讨论】:

试试location.reload(); @KamleshPaul 您的意思是调用 javascript 来初始化页面重新加载。我想知道 Livewire 组件(在 php 中)是否有直接的解决方案,比如 redirect() 或其他东西 【参考方案1】:

Livewire 将原始 URL 存储在 Referer 标头中。您可以使用它来刷新页面:

return redirect(request()->header('Referer'));

【讨论】:

【参考方案2】:

检查您使用的是 Livewire 版本 2.x.x,并且您应该能够按照此处的文档进行操作:

https://laravel-livewire.com/docs/2.x/redirecting

Livewire 组件:

class ContactForm extends Component

    public $email;

    public function addContact()
    
        Contact::create(['email' => $this->email]);

        return redirect()->to('/contact-form-success');
    

Livewire 组件模板

<div>
    Email: <input wire:model="email">

    <button wire:click="addContact">Submit</button>
</div>

【讨论】:

所以我应该重定向到它自己? 是的。我通常只是重定向到同一页面。

以上是关于在 Livewire 中强制重新加载整页的主要内容,如果未能解决你的问题,请参考以下文章

在 Ionic 中更改 HTML 时避免整页重新加载

Ionic 4 路由到带有选项卡的视图会触发整页重新加载

laravel - livewire 整页组件

获取“由于 0 不被接受而中止”并使用 react-hot-loader 重新加载整页

您的一些测试进行了整页重新加载 - 运行 Jasmine 测试时出错

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