提问人:alex000111 提问时间:11/15/2023 最后编辑:alex000111 更新时间:11/16/2023 访问量:80
当我使用 Laravel、Livewire 和 AlpineJS 发送评论时出错
Errors when I send a comment with Laravel, Livewire and AlpineJS
问:
我有一个无法解决的问题。 我用 Laravel 10、livewire 3、AlpineJS 3 做了一个博客。
我会向你展示我的代码。
组件 livewire:
<?php
namespace App\Livewire;
use App\Models\Post;
use App\Models\Comment;
use Livewire\Component;
class CommentCreate extends Component
{
public string $content = '', $email = '', $nickname = '';
public Post $post;
public bool $creating = false;
public function mount(Post $post, bool $creating = false, $parentComment = null)
{
$this->post = $post;
$this->creating = $creating;
}
public function render()
{
return view('livewire.comment-create');
}
private function resetInputFields()
{
$this->content = '';
$this->email = '';
$this->nickname = '';
}
public function createComment()
{
$comment = Comment::create([
'content' => $this->content,
'posts_id' => $this->post->id,
'parent_id' => $this->parentComment?->id,
'email' => $this->email,
'nickname' => $this->nickname,
]);
$this->resetInputFields();
$this->dispatch('commentCreated', $comment->id);
}
}
查看直播:
<div class="mb-5">
<div x-data="{
focused: {{ $creating ? 'true' : 'false' }},
init() {
$wire.on('commentCreated'), () => {
this.focused = false;
}
}
}">
<button @click="focused = true" type="button" class="btn btn-info">
Add comment
</button>
<div class="mt-5" :class="focused ? '' : 'd-none'">
<input wire:model.live="nickname" class="form-control bg-white" type="text"
placeholder="Pseudo" aria-label="Text input with dropdown button">
<input wire:model.live="email" class="form-control bg-white mt-4"
type="email" placeholder="Email"
aria-label="Text input with dropdown button">
<textarea wire:model.live="content" class="form-control bg-white mt-4"
rows="10"
placeholder="Mettre un commentaire ici ..." aria-label="Text input with
dropdown button">
</textarea>
<div>
<button wire:click='createComment' class="btn btn-primary mt-4"
type="Submit">
<span class="text-white fw-semi-bold">Envoyer Commentaire</span>
</button>
<button @click="focused = false; isEdit = false;
$wire.dispatch('cancelEditing')" type=button
class="btn btn-info mt-4">
Cancel
</button>
</div>
</div>
</div>
</div>
在浏览器的控制台中,每次尝试单击添加帖子中的发送时,我都会遇到多个错误。而且表单不会折叠,因为每次有人发送评论时我都想要这个。
我不知道该尝试什么了。
你能帮我吗?
再见
答:
1赞
Pippo
11/16/2023
#1
请注意,括号放错了位置,事件侦听器的初始化应为:
$wire.on('commentCreated', () => {
this.focused = false;
})
一些神奇的属性可能在 init() 函数中不可用,您可以尝试将 $wire 替换为 Livewire:
Livewire.on('commentCreated', () => {
但是,监听(自定义)事件的最短方法是使用 X-ON 或其简写符号 @:
<div x-data="{focused: {{ $creating ? 'true' : 'false' }}}"
@comment-created.camel.window="focused = false"
>
评论
0赞
alex000111
11/16/2023
嗨,皮波,非常感谢您的回答。我试图在很多地方找到答案,但我找不到。再见。
0赞
alex000111
11/16/2023
您好,现在多亏了 Pippo,我解决了我的问题,我还有另一个问题,即即使我尝试删除它们,字段(昵称、电子邮件、内容)仍然被填充。这时我打来电话: 所以,我找到了一种方法来解决视图实时线中的问题,通过更改,但它没有用!你有解决这个问题的方法吗?谢谢$this->resetInputFields()
$this->resetInputFields();
$this>reset('nickname','email','content')
评论