Laravel Livewire / PHP 中的延迟布尔值变化
Delay boolean changing in Laravel Livewire / PHP
我想在几秒钟后切换一个布尔值。我最初认为我可以将布尔值设置为 true(显示吐司)然后 sleep(2)
然后再次将布尔值设置为 false。但所有发生的事情(显然)睡眠被忽略,布尔值被切换为真然后立即为假,所以你甚至看不到它出现。
任何人都可以阐明这种情况如何/为什么发生以及如何克服它而不使用 JavaScript 吐司替代品?
public function store()
{
$this->validate();
$this->fileref->save();
$this->show_toast = true; # Toast show
sleep(2); # Wait...
$this->show_toast = false; # Toast hide
}
根据开头的问题,这是我的解决方案,不求助于 Javascript toast 库,例如 Notyf
或 Toastr
。我无意完全避免使用 Javascript。
话虽如此,通过调度一个浏览器事件 (server-side) 然后向我的组件添加一个侦听器 (server-side),我仍然能够主要使用 server-side & 一个简单的 @if
-wrapped 通知 (html) 来呈现我的吐司通知,计时,然后删除它。
public function store()
{
$this->validate();
$this->fileref->save();
$this->show_toast = true; # Toast show
$this->dispatchBrowserEvent('fileStored');
}
然后,回到我的 Livewire 组件:
protected $listeners = ['eatToast' => 'hideToast'];
最后,唯一的Javascript部分:
document.addEventListener('fileStored', function () {
setTimeout(() => {
Livewire.emit('eatToast');
}, 5000);
});
隐藏 toast 的最终方法(在 Livewire 组件内部):
public function hideToast() {
$this->show_toast = false;
}
我想在几秒钟后切换一个布尔值。我最初认为我可以将布尔值设置为 true(显示吐司)然后 sleep(2)
然后再次将布尔值设置为 false。但所有发生的事情(显然)睡眠被忽略,布尔值被切换为真然后立即为假,所以你甚至看不到它出现。
任何人都可以阐明这种情况如何/为什么发生以及如何克服它而不使用 JavaScript 吐司替代品?
public function store()
{
$this->validate();
$this->fileref->save();
$this->show_toast = true; # Toast show
sleep(2); # Wait...
$this->show_toast = false; # Toast hide
}
根据开头的问题,这是我的解决方案,不求助于 Javascript toast 库,例如 Notyf
或 Toastr
。我无意完全避免使用 Javascript。
话虽如此,通过调度一个浏览器事件 (server-side) 然后向我的组件添加一个侦听器 (server-side),我仍然能够主要使用 server-side & 一个简单的 @if
-wrapped 通知 (html) 来呈现我的吐司通知,计时,然后删除它。
public function store()
{
$this->validate();
$this->fileref->save();
$this->show_toast = true; # Toast show
$this->dispatchBrowserEvent('fileStored');
}
然后,回到我的 Livewire 组件:
protected $listeners = ['eatToast' => 'hideToast'];
最后,唯一的Javascript部分:
document.addEventListener('fileStored', function () {
setTimeout(() => {
Livewire.emit('eatToast');
}, 5000);
});
隐藏 toast 的最终方法(在 Livewire 组件内部):
public function hideToast() {
$this->show_toast = false;
}