首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel livewire不发出事件。

Laravel livewire不发出事件。
EN

Stack Overflow用户
提问于 2021-04-08 13:27:09
回答 1查看 968关注 0票数 0

我正在尝试为我的Laravel解决方案中的livewire组件创建一个小的吐司消息调度器,但是事件发射不起作用。

我有这段代码的ToastMessage.php文件

代码语言:javascript
复制
namespace App\Http\Livewire;

use Livewire\Component;

class ToastMessage extends Component
{
    protected $listeners = ['showToast' => 'showToast'];

    public $alertTypeClasses = [
        'success' => ' bg-green-500 text-white',
        'warning' => ' bg-orange-500 text-white', 
        'danger' => ' bg-red-500 text-white', 
    ];

    public $message = 'Notification Message';

    public $alertType = 'success';
    
    public function render()
    {
        return view('livewire.toast');
    }

    public function showToast($message, $alertType)
    {
        $this->message = $message;
        $this->alertType = $alertType;

        $this->dispatchBrowserEvent('toast-message-show');
    }
}

和这个对应的模板

代码语言:javascript
复制
<div class="fixed top-0 right-0 inset-x-0 mb-6 mx-6 px-6 py-5 max-w-sm rounded-lg pointer-events-auto {{ $alertTypeClasses[$alertType] }}"
    x-data="{show:false}" @toast-message-show.window="show = true; setTimeout(() => show=false, 5000);" x-show="show" x-cloak>
    {{ $message }}
</div>

在将一些数据保存在另一个组件中之后,我尝试展示吐司,如下所示:

代码语言:javascript
复制
public function save()
{
    // saving my data, this works

    $this->emit('showToast', 'Your data has been saved', 'success');
}

问题是$this->emit不能工作。我没发现任何错误什么的。我甚至可以添加一些胡言乱语作为排放的参数,它甚至不会崩溃。

我错过了什么。当涉及到调试时,Livewire的文档不够用

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-08 15:12:51

你可以做得更简单。创建刀片文件,例如在partials/flash-messages.php中

代码语言:javascript
复制
@if ($message = Session::get('success'))
    <div class="fixed top-0 right-0 inset-x-0 mb-6 mx-6 px-6 py-5 max-w-sm rounded-lg pointer-events-auto bg-green-500 text-white">
    {{ $message }}
</div>
@endif

@if ($message = Session::get('warning'))
    <div class="fixed top-0 right-0 inset-x-0 mb-6 mx-6 px-6 py-5 max-w-sm rounded-lg pointer-events-auto bg-orange-500 text-white">
    {{ $message }}
</div>
@endif

@if ($message = Session::get('danger'))
    <div class="fixed top-0 right-0 inset-x-0 mb-6 mx-6 px-6 py-5 max-w-sm rounded-lg pointer-events-auto bg-red-500 text-white">
    {{ $message }}
</div>
@endif

在您的刀片组件中

代码语言:javascript
复制
@if(session()->has('message'))
   @include('partials.flash-messages')
@endif

在组件中

代码语言:javascript
复制
public function save()
{
   //....
   session()->flash('success', 'This is the message');
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67005005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档