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

السؤال

نشر

لدي مُكونين 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...