首页 > 解决方案 > 变量中的 Livewire 实例将自身设置为 null

问题描述

在我的 laravel livewire 组件中,我有这段代码。

private $wireAlertService;

public function mount() {
    $this->supervisors = User::getSupervisors();

    $this->wireAlertService = new LivewireAlertService();

    // dd($this->wireAlertService);
}

注释掉dd()的根据需要转储实例LivewireAlertService

但是,在其他方法中,在按钮上触发时wire:click,变量$wireAlertService为空。

public function approveMany($attrs) {

    // code

    dd($this->wireAlertService, (new LivewireAlertService()));
    // $this->wireAlertService->success($this);
    // (new LivewireAlertService())->success($this);
}

在方法中approveMany() dd()转储这个

null
App\Services\LivewireAlertService {#2760}

因此$this->wireAlertService->success($this);在工作时不起作用(所需的)(new LivewireAlertService())->success($this);,但我不太喜欢它。

标签: phplaravellaravel-livewire

解决方案


如Livewire介绍protected中所述,private属性不会持续存在。因此,在您的挂载完成后,该属性将被重置。

如果您希望它是持久的,您需要立即定义它,但是使用类实例化或创建属性是不可能的public

根据服务是什么,您可以将其注入到每个方法中,就像使用Request.


推荐阅读