Php 未能在livewire中单击时刷新组件
尝试了所有可能的解决方案来刷新组件,但失败。是否有任何选项不推送新注释并刷新$comments变量(无论它包含什么) 要在单击“发送”按钮时刷新$comments及其与刀片服务器中回复的关系吗 在“发送”按钮上调用$refresh操作,但似乎不起作用。甚至尝试使用$this->render()重新渲染组件。这也失败了Php 未能在livewire中单击时刷新组件,php,laravel-8,laravel-livewire,Php,Laravel 8,Laravel Livewire,尝试了所有可能的解决方案来刷新组件,但失败。是否有任何选项不推送新注释并刷新$comments变量(无论它包含什么) 要在单击“发送”按钮时刷新$comments及其与刀片服务器中回复的关系吗 在“发送”按钮上调用$refresh操作,但似乎不起作用。甚至尝试使用$this->render()重新渲染组件。这也失败了 <div> @foreach($comments as $item) <div class="row" @if($item-&
<div>
@foreach($comments as $item)
<div class="row" @if($item->reply_id != null) style="margin-left:40px;" @endif>
<div class="col-md-12">
<div class="py-md-4 py-3 border_bottom" >
<div class="row">
<div class="col-md-1 col-sm-1 col-1">
<div class="rating_person pt-3">
<img src="{{ isset($item->owner->profile_picture) ? asset($item->owner->profile_picture) : asset('images/default.jpg') }}">
</div>
</div>
<div class="col-md-11 col-sm-12 col-12">
<div class="rating_view_here_content_single_border">
<div class="rating_view_here_content_single">
<div class="rating_view_stars d-flex justify-content-between pt-3">
<div class="rating_view_heading">
<h4>{{ $item->owner->name }}</h4>
<div class="rating_wrapper">
<a href="#" class="grey_rating active-rating">
<i class="fa fa-star" aria-hidden="true"></i>
</a>
<a href="#" class="grey_rating active-rating">
<i class="fa fa-star" aria-hidden="true"></i>
</a>
<a href="#" class="grey_rating active-rating">
<i class="fa fa-star" aria-hidden="true"></i>
</a>
<a href="#" class="grey_rating active-rating">
<i class="fa fa-star" aria-hidden="true"></i>
</a>
<a href="#" class="grey_rating active-rating">
<i class="fa fa-star" aria-hidden="true"></i>
</a>
</div>
</div>
<span class="rating_days">{{ \App\Library\Helper::getTime($item->created_at) }}</span>
</div>
<div class="rating_comment_here pt-3">
<p>{{ $item->comment }}</p>
<p>
<a href="javascript:void(0)" class="reply" data-id="{{ $item->id }}" wire:click="toggleCommentBox({{ $item->id }}, 'true')">
<i class="fa fa-reply" aria-hidden="true"></i> <span>Reply</span>
</a>
</p>
</div>
@if($item_id == $item->id && $show=="true")
<div class="video_inner_form_wrapper commentBox-{{ $item->id }}">
<form wire:submit.prevent="sendReply" class="row">
<input type="hidden" name="reply_id" value="{{ $item->id }}">
<div class="comment_input col-md-8">
<input type="text" class="bluish_label video_inner_input @error('replyText') is-invalid @enderror" wire:model.lazy="replyText" placeholder="Write your comment here">
@error('replyText')
<div class="invalid-feedback">{{$message}}</div>
@enderror
</div>
<div class="col-md-4">
<button type="submit" class="btn_edit text-uppercase" wire:click="$refresh">Send</a>
<button type="button" class="btn_edit text-uppercase cancel" wire:click="toggleCommentBox({{ $item->id }}, 'false')">Cancel</a>
</div></form>
</div>
@endif
</div>
</div>
</div>
</div>
</div>
<livewire:frontend.discussion-chat :key="'chat-' . $item->id" :comments="$item->replies" :id="$model_id" :type="$model_type" />
</div>
</div>
@endforeach
</div>
@foreach($注释作为$项)
答复(id)null)style=“左边距:40px;”@endif>
所有者->个人资料(图片)?资产($item->owner->profile\u picture):资产('images/default.jpg')}>
{{$item->owner->name}
{{\App\Library\Helper::getTime($item->created_at)}
{{$item->comment}
@如果($item_id==$item->id&&$show==“true”)
@错误('replyText')
{{$message}}
@恩德罗
发送
取消
@恩迪夫
@endforeach
由于没有更新任何属性,livewire聊天组件将不会刷新
可能的解决方案不是将列表作为参数传递,而是在聊天组件中获取它。使用事件触发刷新:
@click="$emit('discussion.chat.{{ $id }}.refresh')"
在前端内部。讨论聊天
public function listeners(): array
{
return [
"discussion.chat.$this->id.refresh" => "reload"
];
}
public function reload(): void
{
// E.g.
$this->comments->fresh();
}
这是子组件,现在我已经设置了事件,并在父组件中使用refresh收听它。它工作得很好。虽然我没有真正理解你的想法,但如果你能详细阐述一下,那就太好了。谢谢。我建议你可以将事件格式设置为$emit('discussion.chat.refresh,passtheidher),然后在重新加载函数reload($id)中期望该值,也可以在livewire中引入实例变量protected$listeners=[“discussion.chat.refresh”=>“reload”]@Aliajan您有一个子组件,它接收聊天ID作为参数,并将所有评论加载到一个有说服力的集合中。该子组件将侦听刷新事件并重新加载评论。该事件可以从父级或应用程序中的任何其他位置触发。好的,谢谢。尽管通过调用事件解决了问题来自孩子和家长的倾听