You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Livewire子组件值为Null:表单提交后父组件值非空子组件为空

Livewire父子组件数据传递问题:子组件属性值为Null的解决方法

提交表单后,父组件输入值正常,但调用<livewire:include-service>子组件时,父组件的include_service_title属性输出为Null,这是因为Livewire父子组件默认不会自动共享属性,父组件无法直接访问子组件的内部属性,需通过以下正确方式实现数据传递:

解决方案1:通过双向绑定(wire:model)传递数据

步骤1:配置子组件

子组件(IncludeService.php)中声明公开属性,并在视图中绑定该属性:
子组件类代码:

// Livewire 3
namespace App\Livewire;

use Livewire\Component;

class IncludeService extends Component
{
    #[Livewire\Attributes\PublicProperty]
    public $include_service_title = '';

    public function render()
    {
        return view('livewire.include-service');
    }
}

// Livewire 2
namespace App\Http\Livewire;

use Livewire\Component;

class IncludeService extends Component
{
    public $include_service_title = '';

    public function render()
    {
        return view('livewire.include-service');
    }
}

子组件视图代码(resources/views/livewire/include-service.blade.php):

<label class="label_title">{{ __('Include Service Title') }}</label>
<input class="form--control" type="text" wire:model.defer="include_service_title">

步骤2:父组件绑定子组件属性

父组件视图中引用子组件时,通过wire:model.defer绑定到父组件的同名属性:

<!-- child component -->
<div class="row g-4">
    <div class="col-lg-4 col-sm-6">
        <div class="single-info-input">
            <livewire:include-service wire:model.defer="include_service_title">
        </div>
    </div>
</div>

父组件类中声明对应的属性:

// 父组件类
public $title = '';
public $include_service_title = '';

public function serviceStore()
{      
    dd($this->include_service_title);
}

解决方案2:通过事件传递数据

若不需要双向绑定,可通过Livewire事件机制传递数据:

步骤1:子组件触发事件

在子组件中添加方法触发事件,传递属性值:

// 子组件类
public function emitTitle()
{
    $this->dispatch('includeServiceTitleUpdated', title: $this->include_service_title);
}

可在子组件视图的输入框添加wire:change="emitTitle"实时触发,或在父组件提交前触发。

步骤2:父组件监听事件并更新属性

父组件中监听事件,接收子组件传递的数据:

// 父组件类
public $title = '';
public $include_service_title = '';

protected $listeners = ['includeServiceTitleUpdated' => 'updateIncludeServiceTitle'];

public function updateIncludeServiceTitle($title)
{
    $this->include_service_title = $title;
}

public function serviceStore()
{      
    dd($this->include_service_title);
}

内容的提问来源于stack exchange,提问作者Hasibur Rahman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 00:29:55