Livewire 组件转换为另一个 livewire 组件

Posted

技术标签:

【中文标题】Livewire 组件转换为另一个 livewire 组件【英文标题】:Livewire component into another livewire component 【发布时间】:2021-09-14 04:47:44 【问题描述】:

我有一个包含几张卡片的 livewire 概览组件。在这些卡片中有一个 livewire 表单,但是当我将表单包含到概述组件中时,我的整个 livewire 停止工作..

我要添加到概览组件文件中的唯一一行是:

@livewire('apply-form')

当我删除该 livewire 方法时,一切都会再次正常运行,但我的概览组件中也需要该表单..

我做错了什么吗,或者有人可以帮我解决这个奇怪的“错误”吗?

不知道我的 livewire 版本,但资产已过时。

livewire 也没有给出错误。

Main component where we include the other component that crashes the rest

使其余部分崩溃的 livewire 组件的代码:


namespace App\Http\Livewire;

use Illuminate\Support\Facades\Mail;
use Livewire\Component;
use App\Mail\ApplyMail;
use Livewire\WithFileUploads;

class ApplyForm extends Component

    use WithFileUploads;

    public $voornaam;
    public $achternaam;
    public $woonplaats;
    public $geboortedatum;
    public $emailadres;
    public $telefoonnummer;
    public $vacaturenaam;
    public $cv;

    protected $rules = [
        'voornaam' => 'required|max:10',
        'achternaam' => 'required|max:10',
        'woonplaats' => 'required|max:10',
        'geboortedatum' => 'required|date',
        'emailadres' => 'required|e-mail',
        'telefoonnummer' => 'required|numeric',
        'vacaturenaam' => 'required',
        'cv' => 'required|mimes:pdf'
    ];

    public function submit()
    
        $validated = $this->validate();

        $cvRandom = rand(1, 9999999) . '.pdf';

        // Upload cv
        $this->cv->storeAs('cvs', $cvRandom);

        Mail::to('info@nlconnekt.nl')->send(new ApplyMail([$validated, $cvRandom]));

        // Reset the values after a form submit
//        $this->voornaam = '';
//        $this->achternaam = '';
//        $this->woonplaats = '';
//        $this->geboortedatum = '';
//        $this->emailadres = '';
//        $this->telefoonnummer = '';

        return session()->flash('message', 'Bedankt voor uw sollicitatie. Wij nemen z.s.m contact met u op');
    

    public function render()
    
        return view('livewire.apply-form');
    

【问题讨论】:

由于前端发生了很多 Livewire,开发控制台(Inspect 元素)中是否有任何错误?此外,您还没有向我们提供组件刀片视图。您是否为此使用单个根元素? 嵌套组件中的代码必须放到div容器中 【参考方案1】:

在嵌套组件时尝试按照the documentation 中的建议为该 livewire 组件添加一个键

@livewire('apply-form', ['vacaturnaam' => $vacancy->title], key($vacancy->id))

【讨论】:

以上是关于Livewire 组件转换为另一个 livewire 组件的主要内容,如果未能解决你的问题,请参考以下文章

如何在点击时破坏 livewire 组件?

滚动到页面顶部 - livewire 组件 - alpine js

Laravel 和 Livewire:组件更改时如何执行 javascript 函数?

在 Laravel 8 Jetstream 的 Blade 组件中绑定 Livewire 属性

使用刀片 (Livewire) 调用动态内容

Laravel(Livewire)中的组件拆分和保留参数