laravel livewire,如何通过点击将id或数据传递给另一个组件
laravel livewire, how to pass the id or data to another component by click
我有两个组件 Posts 和 Post,Posts 显示 posts 并且通过单击图像我想显示已单击 post 在另一个组件中。
Posts class 和下面的组件:
组件视图:
<div class="post" x-data="{open:false}">
@foreach($posts as $post)
<div>
<h1>{{ $post->name }}</h1>
<h3>{{ $post->body }}</h3>
<img @click="open = !open" wire:click="showPost({{ $post->id }})" src="{{ $post->image }}" alt="">
</div>
@endforeach
<livewireL:post>
</div>
组件 Class:
class Posts extends Component
{
public $posts, $post;
public function mount(){
$this->posts = Post::all();
}
public function showPost($id){
$post = Post::find($id);
$this->post = $post;
}
public function render()
{
return view('livewire.posts');
}
}
这是 Post 组件和 class 我想在这个组件中显示点击数据,我试过 $emit 和很多作为文档但没有结果。
我要呈现该数据的组件视图:
<div x-show="open">
<h1>{{ $post->name }}</h1>
<h3>{{ $post->body }}</h3>
<img src="{{ $post->image }}">
</div>
Class 我要传递数据:
class Post extends Component
{
public $post;
public function mount($id)
{
$this->post = \App\Post::find($id);
}
public function render()
{
return view('livewire.post');
}
}
您必须使用事件将数据从一个组件传递到另一个组件,如下所示。
组件 A Blade:
<img @click="open = !open" wire:click="showPost({{ $post->id }})" src="{{ $post->image }}" alt="">
组件 A Class:
public function showPost($id){
$post = Post::find($id);
$this->post = $post;
$this->emit('newPost', $post->id);
}
您现在可以像这样从其他 livewire 组件捕获该事件:
组件 B Class:
class Post extends Component
{
public $post;
protected $listeners = ['newPost'];
public function mount($id)
{
$this->post = \App\Post::find($id);
}
public function render()
{
return view('livewire.post');
}
public function newPost($postId)
{
// here u have the id in your other component.
}
}
您也可以通过其他方式实现。您可以从组件 blade 传递 id,也可以检查 this 。
我有两个组件 Posts 和 Post,Posts 显示 posts 并且通过单击图像我想显示已单击 post 在另一个组件中。
Posts class 和下面的组件:
组件视图:
<div class="post" x-data="{open:false}">
@foreach($posts as $post)
<div>
<h1>{{ $post->name }}</h1>
<h3>{{ $post->body }}</h3>
<img @click="open = !open" wire:click="showPost({{ $post->id }})" src="{{ $post->image }}" alt="">
</div>
@endforeach
<livewireL:post>
</div>
组件 Class:
class Posts extends Component
{
public $posts, $post;
public function mount(){
$this->posts = Post::all();
}
public function showPost($id){
$post = Post::find($id);
$this->post = $post;
}
public function render()
{
return view('livewire.posts');
}
}
这是 Post 组件和 class 我想在这个组件中显示点击数据,我试过 $emit 和很多作为文档但没有结果。
我要呈现该数据的组件视图:
<div x-show="open">
<h1>{{ $post->name }}</h1>
<h3>{{ $post->body }}</h3>
<img src="{{ $post->image }}">
</div>
Class 我要传递数据:
class Post extends Component
{
public $post;
public function mount($id)
{
$this->post = \App\Post::find($id);
}
public function render()
{
return view('livewire.post');
}
}
您必须使用事件将数据从一个组件传递到另一个组件,如下所示。
组件 A Blade:
<img @click="open = !open" wire:click="showPost({{ $post->id }})" src="{{ $post->image }}" alt="">
组件 A Class:
public function showPost($id){
$post = Post::find($id);
$this->post = $post;
$this->emit('newPost', $post->id);
}
您现在可以像这样从其他 livewire 组件捕获该事件:
组件 B Class:
class Post extends Component
{
public $post;
protected $listeners = ['newPost'];
public function mount($id)
{
$this->post = \App\Post::find($id);
}
public function render()
{
return view('livewire.post');
}
public function newPost($postId)
{
// here u have the id in your other component.
}
}
您也可以通过其他方式实现。您可以从组件 blade 传递 id,也可以检查 this 。