如何在点击时销毁 livewire 组件?
How to destroy livewire component on click?
我创建了一个带有一些输入字段的 livewire 组件,向父组件添加了一个 for 循环,其中包含子组件。
@for($i = 0; $i < $count; $i++)
@livewire('dashboard.profile.garage-service-list-item', ['garage' => $garage], key($i))
@endfor
每个子组件都有一个删除按钮。这个按钮的方法怎么样?
两种方式 spring 记住。一个是如果项目被删除,你会显示一个空视图,或者你触发一个事件来刷新在该循环中呈现的所有组件。
1:刷新父级
This assumes that the parent component is a Livewire component.
在你的父级中,你可以监听一个事件来刷新自己。通过添加以下内容,只需在父组件(具有 @for
循环的组件)中声明一个侦听器。
protected $listeners = ['refreshParentComponent' => '$refresh'];
refreshParentComponent
是事件的名称,您可以将其重命名为更合适的名称(该名称可能不是一个好名称),$refresh
是动作 - 在 Livewire 中,$refresh
动作是一个神奇的动作,它只是简单地整体刷新组件,基本上是 re-rendering 它。这意味着您将在删除项目后获得一组新数据,并使用该数据渲染所有数据。
要触发事件,在您删除项目的 Profile\GarageServiceListItem
class 中,您可以触发或 发出 特定事件- 你可以向上发射它。您可以通过调用 emitUp
方法来做到这一点。
$this->emitUp('refreshParentComponent');
2:渲染空 HTML 块
您可以将布尔值 属性 添加到您的 Livewire-component,例如 public $show = true;
。然后在 garage-service-list-item
视图的基础上,首先检查 属性.
<div>
@if ($show)
<!-- The rest of your component here -->
@endif
</div>
然后在删除组件的方法中,设置$this->show = false;
即可!该组件将呈现一个空的 <div>
块。
我创建了一个带有一些输入字段的 livewire 组件,向父组件添加了一个 for 循环,其中包含子组件。
@for($i = 0; $i < $count; $i++)
@livewire('dashboard.profile.garage-service-list-item', ['garage' => $garage], key($i))
@endfor
每个子组件都有一个删除按钮。这个按钮的方法怎么样?
两种方式 spring 记住。一个是如果项目被删除,你会显示一个空视图,或者你触发一个事件来刷新在该循环中呈现的所有组件。
1:刷新父级
This assumes that the parent component is a Livewire component.
在你的父级中,你可以监听一个事件来刷新自己。通过添加以下内容,只需在父组件(具有 @for
循环的组件)中声明一个侦听器。
protected $listeners = ['refreshParentComponent' => '$refresh'];
refreshParentComponent
是事件的名称,您可以将其重命名为更合适的名称(该名称可能不是一个好名称),$refresh
是动作 - 在 Livewire 中,$refresh
动作是一个神奇的动作,它只是简单地整体刷新组件,基本上是 re-rendering 它。这意味着您将在删除项目后获得一组新数据,并使用该数据渲染所有数据。
要触发事件,在您删除项目的 Profile\GarageServiceListItem
class 中,您可以触发或 发出 特定事件- 你可以向上发射它。您可以通过调用 emitUp
方法来做到这一点。
$this->emitUp('refreshParentComponent');
2:渲染空 HTML 块
您可以将布尔值 属性 添加到您的 Livewire-component,例如 public $show = true;
。然后在 garage-service-list-item
视图的基础上,首先检查 属性.
<div>
@if ($show)
<!-- The rest of your component here -->
@endif
</div>
然后在删除组件的方法中,设置$this->show = false;
即可!该组件将呈现一个空的 <div>
块。