【问题标题】:Laravel livewire passing data between two components not in the same pageLaravel livewire 在不在同一页面的两个组件之间传递数据
【发布时间】:2021-06-22 09:30:56
【问题描述】:

我是第一次使用 Laravel 和 Livewire,如果问题很愚蠢,请见谅。

我已阅读 Livewire 文档 https://laravel-livewire.com/docs/2.x/events 那个

Livewire 组件可以通过全局事件系统相互通信。只要两个 Livewire 组件位于同一页面上,它们就可以使用事件和侦听器进行通信。

我有两个需要通信的数据表,但它们不在同一页面上。

是否有可能的解决方法或解决方案? 非常感谢。

【问题讨论】:

  • 我想像 Laravel Echo 这样的东西可以做到这一点,但为什么他们首先需要沟通呢?听起来有点太复杂了。
  • @IGP 原因是因为我从用户数据表中获取用户 ID,并且需要根据该特定用户 ID 显示用户活动数据表。用户数据表和用户活动数据表是两个 Livewire 组件。

标签: laravel datatable laravel-livewire


【解决方案1】:

路由模型绑定就是答案。如果您在一个组件中加载,例如从用户表的一行中加载 id,您可以通过路由重定向到绑定 id 的另一个组件。 用户表刀片

<td>
  <a href="{{ route('user.activity', ['id' => $user->id]) }}">View Activity</a>
<td>

web.php

Route::get('activity/user/{id}', UserActivityComponent::class)->name('user.activity');

UserActivityComponent 一旦你点击或通过标签访问它就会被渲染(在我的例子中)。所以,就像文档说的那样,你可以这样做

class UserActivityComponent extends Component
{
  public $user;

  public $name;
  public $email;
  
  //....
  public function mount($id)
  {
     $this->user = User::find($id);
     $this->name = $this->user->name;
     $this->email = $this->user->email;
  }
  public function render()
  {
     return view('user-activity-component');
  }  
}

并在 UserActivityComponent 刀片中部署您想要在此显示的所有内容

【讨论】:

  • 听起来很棒。但是我在用户活动组件中需要什么方法?以及如何在视图中调用组件,带参数还是不带参数?
  • 更新上面的答案
猜你喜欢
  • 2020-10-23
  • 2020-11-14
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
  • 2020-02-18
相关资源
最近更新 更多