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