اذهب إلى المحتوى
  • 0

الإتصال بين مُكونين في laravel livewire

Mahmoud Alrashidi

السؤال

لدي مُكونين livewire:

<div class="col-md-4 p-4">
  @livewire('app-add-task')
</div>

<div class="col-md-8 p-4">

  @livewire('app-tasks')

</div>

المُكون الأول لإضافة مهمة جديدة و المُكون الثاني لعرض جميع المهام، عند إضافتي للمهمة يتم إضافتها لكن لا تظهر مباشرة في الصفحة و إنما حتى أقوم بتحديث الصفحة هل هناك طريقة لعرض المهمة مباشرة من دون تحديث للصفحة،

هذا كود المُكون الأول:

class AppAddTask extends Component
{
  public $title;

  public function render()
  {
    return view('livewire.app-add-task');
  }

  public function addTask()
  {

    auth()->user()->tasks()->create([
      'title' => $this->title,
      'status' => false,
    ]);

    $this->title = "";
  }
}

و هذا كود المُكون الثاني:

class AppTasks extends Component
{

  public function render()
  {
    $totalTasks = auth()->user()->tasks()->count();
    $tasks = auth()->user()->tasks()->latest()->get();
    return view('livewire.app-tasks', [
      'totalTasks' => $totalTasks,
      'tasks' => $tasks
    ]);
  }
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

نعم فالفكرة تكمن في إستخدام الأحداث و هناك عدة طرق لإستخدامها من بينها إرسال أو عمل emit للحدث من خلال المُكون الأول و التسمع على الحدث في المُكون الثاني لكن بما أننا نريد عمل تحديث ف livewire توفر طريقة خاصة إسمها $refresh، يُمكن التعامل مع الأحداث بعدة طرق عن طريق القالب أو عن طريق كلاس المُكون أو عن طريق javascript و هذا شرح الطريقة الثانية:

إرسال الحدث من المكون الأول:

class AppAddTask extends Component
{
  public $title;

  public function render()
  {
    return view('livewire.app-add-task');
  }

  public function addTask()
  {

    auth()->user()->tasks()->create([
      'title' => $this->title,
      'status' => false,
    ]);

    $this->title = "";

    $this->emit('taskAdded'); // هنا قمنا بإرسال الحدث
  }
}

التسمع على الحدث من خلال المُكون الثاني و عمل refresh: 

class AppTasks extends Component
{

  protected $listeners = ['taskAdded' => '$refresh']; // التسمع و عمل تحديث

  public function render()
  {
    $totalTasks = auth()->user()->tasks()->count();
    $tasks = auth()->user()->tasks()->latest()->get();
    return view('livewire.app-tasks', [
      'totalTasks' => $totalTasks,
      'tasks' => $tasks
    ]);
  }
}
رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...