laravel livewire,如何通过单击将 id 或数据传递给另一个组件

Posted

技术标签:

【中文标题】laravel livewire,如何通过单击将 id 或数据传递给另一个组件【英文标题】:laravel livewire, how to pass the id or data to another component by click 【发布时间】:2020-06-24 07:17:19 【问题描述】:

我有两个组件 Posts 和 Post,Posts 显示帖子,通过点击图片我想在另一个组件中显示点击帖子的数据。

在下面发布类和组件:

组件视图:


<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 " >
    </div>
  @endforeach


<livewireL:post>

    </div>

组件类:

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组件和类,我尝试了$emit和许多作为文档但没有结果。

我要呈现该数据的组件视图:


<div x-show="open">
  <h1> $post->name </h1>
  <h3> $post->body </h3>
  <img src=" $post->image ">
</div>

我要传递数据的类:

class Post extends Component


  public $post;



  public function mount($id)
  
    $this->post = \App\Post::find($id);
  



    public function render()
    
        return view('livewire.post');
    

【问题讨论】:

【参考方案1】:

您必须使用事件将数据从一个组件传递到另一个组件,如下所示。

组件 A 刀片:

  <img @click="open = !open" wire:click="showPost( $post->id )" src=" $post->image " >

组件A类:

public function showPost($id)
    $post = Post::find($id);
    $this->post = $post;
    $this->emit('newPost', $post->id);
  

您现在可以像这样从其他 livewire 组件捕获该事件:

组件 B 类:

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. 
   


您也可以通过其他方式实现此目的。您可以从组件刀片传递 id,也可以检查 this。

【讨论】:

谢谢兄弟,还是想在 Laravel 中使用 React 或 Livewire,但是尝试,tkx 那么你最终选择了 livewire 吗?哈哈 Livewire 在用户交互非常少的情况下非常好用!但是当你想到有几千到几百万用户交互的大规模应用程序时,你必须选择 react/vue 以保持良好的用户体验并保持服务器的健康!

以上是关于laravel livewire,如何通过单击将 id 或数据传递给另一个组件的主要内容,如果未能解决你的问题,请参考以下文章

当我在 Laravel livewire 上单击事件时获得 404 模态

Laravel 和 Livewire 在单击时更改按钮样式

Laravel 8 livewire 在任务完成或在其外部单击页面时隐藏菜单组件

Laravel Livewire 分页

如何使用 if 路由条件在 2 个单独的视图函数中使用相同的渲染? (Laravel/Livewire)

如何在 Eloquent 模型中使用 Laravel Livewire?