راکت
حل شده

به روزرسانی اتوماتیک دیتا در ویو لاراول

17 پاسخ

سلام خسته نباشید.
یه صفحه دارم که دیتا داخلش نمایش داده میشه و میخوام بصورت اتومامیک هر چند ثانیه بدون ریلود شدن صفحه اون بخش div به روز بشه.
از طریق این پرسش توی استک اوور تونستم این کارو انجام بدم ولی مشکلی که دارم این هستش که من توی حالت عادی از foreach بلید blade استفاده کردم و توش شرط گذاشتم. ولی توی پرسش استک حلقه برده توی جاوااسکریپت.
چه طوری بصورت کامل اون حلقه ای که نوشتم با اون حلقه ی جایگزاری کنم؟ چونکه حلقه ای که با خود blade نوشتم داخلش شرط گذاشتم و کلاس های مختلف واسه استایلش هم قرار داده شده.
ممنون میشم راهنمایی کنید.

@mhyeganeh @mhmdrezafk @sina.it91 @@ali.bayat

محمد
محمد
@Mohammad79
ثبت پرسش جدید

پاسخ‌ها

17
محمد رضا
محمد رضا
@salar.mohammad2013

تخصص: Full Stack Developer

بهترین پاسخ

سلام دوست عزیز
چون داری از blade استفاده میکنی و ارتباطات ajax نداری
خیلی راحت شما با استفاده از livewire میتونی این کار رو انجام بدی
دوره اموزشیش توی راکت هست و عالیه
اصلا بابتش نترس و نیازی نیست 100 درصدشو بفهمی در ابتدای کار
فقط نیازتو باهاش برطرف کن و باهاش بیشتر اشنا شو
ب شدت امکانات عالی ای داره
موفق باشی

حسین درویشی
حسین درویشی
@iam.hossein

تخصص: برنامه نویس لاراول

سلام
باید از جاوا اسکریپت استفاده کنید ، blade سمت سرور رندر میشه و به سمت کاربر ارسال میشه و بعد از ارسال نمتیونه داده ها رو تغییر بدید باهاش

باید با استفاده از جاوا اسکریپت این کار رو انجام بدید واگر لازم هست که اطلاعات از سمت سرور خوانده بشه باید api بنویسد یا در هر حال route شما در لاراول پاسخ json برگردونه تا بشه توی جاوا اسکریپت به راحتی ازش استفاده کرد.
توی این مسئله باید از ajax استفاده کنید
فکر کنم این پاسخ میتونه کمکتون کنه

محمد
محمد
@Mohammad79

تخصص: همیشه در حال یادگیری ...

در موردش کدش میتونید راهنمایی کنید.
ممنون

شاید پاسخ شما همین‌جا باشد

محمد
محمد
@Mohammad79

تخصص: همیشه در حال یادگیری ...


            <script>
                $(document).ready(function() {
                    setInterval(function() {
                        $("#data").load(window.location.href + " #data");
                    }, 3000);
                });
            </script>

برای حلقه از دستورات blade استفاده نکردم (ولی خوب باز فایل blade دیگه!) و کد بالارو اضافه کردم الان به روز میشه ولی مشکلی داره این هستش که کل دیتا میپره!

محمد
محمد
@Mohammad79

تخصص: همیشه در حال یادگیری ...

بنظرتون این لینک کارمنو راه میندازه؟
https://laravel-livewire.com/docs/2.x/polling

و یه چیز دیگه livewire توی پروژه اضافه کنم جاهای دیگه بهم نمیزه؟؟ الان کل کار با Blade هستش.
@salar.mohammad2013

محمد رضا
محمد رضا
@salar.mohammad2013

تخصص: Full Stack Developer

سلام
poll مثل interval دوره ای رفرش میکنه
نه هیچ مشکلی با بقیه پروژت نداره و کاملا راحتی میتونی توی یه بخش کوچیک پروژت بزاریش مثلا توی یک کامپوننت معمولی غیر لایو وایری
باید ببینی نیازت چیه
شاید شما بهتر باشه ajax بزنی مثلا و رفرش کنی
بسته به پروژه ی خودتونه

محمد
محمد
@Mohammad79

تخصص: همیشه در حال یادگیری ...

@salar.mohammad2013

  1. توی کنترلر اصلی blade ریترن میکنم.
  2. توی blade کد هامو گذاشتم و از طریق @livewire() اون کامپونتت ریترن میکنم.
  3. توی کلاس کامپونتت توی فاکنش render کوئری زدم و کلا کد زیر اجرا کردم.
    public function render()
    {
        $data = Data::orderBy('updated_at', 'ASC')->get();
        return view('livewire.show-data', compact($data));
    }
  4. توی قایل blade کامپوننت هم حلقه دیتا و کد های مربوط نوشتم. متاسفانه Invalid argument supplied for foreach() میده.
    چک کردم data کلا نال هستش!
محمد رضا
محمد رضا
@salar.mohammad2013

تخصص: Full Stack Developer

سلام داخل همین render یک dd از data بگیرید

رضا جهانگیر
رضا جهانگیر
@rezajahangir

تخصص: Full-Stack Developer

سلام به شما دوست عزیز.
اگه میخواین زمانی که دیتای جدید اضافه شد، بدون رفرش شدن صفحه دیتا جدید نمایش داده بشه باید از وب سوکت استفاده کنید.
موفق باشید.

محمد
محمد
@Mohammad79

تخصص: همیشه در حال یادگیری ...

اره dd گرفتم دیتارو میاره و اوکی هستش.


return view('livewire.show-data', compact($data));```
محمد
محمد
@Mohammad79

تخصص: همیشه در حال یادگیری ...

همون dd توی ویو کامپونتت میگریم نال میده.

@salar.mohammad2013

محمد رضا
محمد رضا
@salar.mohammad2013

تخصص: Full Stack Developer

compact رو به شیوه اشتباهی نوشتید عزیز
نام متغییر در رشته و بدون علامت دلار بزار
کد زیر

public function render()
{
    $data = Data::orderBy('updated_at', 'ASC')->get();
    return view('livewire.show-data', compact('data'));
}
محمد رضا
محمد رضا
@salar.mohammad2013

تخصص: Full Stack Developer

@rezajahangir
ایشون مشکلشون ریلود کردن داده هست
وب سوکت برای فهم این که چه زمانی نیاز به ارسال درخواست رفرش کردن داده داریم به کارشون میاد
فعلا در خود بروزرسانی داده بدون رفرش شدن صفحه مشکل دارن چون از ajax استفاده نمیکنن نیاز به livewire دارن.

محمد
محمد
@Mohammad79

تخصص: همیشه در حال یادگیری ...

خوب دستتون درد نکنه اون اوکی شد حالا دیتا میاد. و مشکل اصلی دیگه بصورت اتوماتیک لود نمیشه. اینو توی blade اصلی استفاده کردم.

<div wire:poll.750ms>
                @livewire('show-data')
</div>
محمد
محمد
@Mohammad79

تخصص: همیشه در حال یادگیری ...

اوکی شد مشکل از @livewireScripts بودش

محمد
محمد
@Mohammad79

تخصص: همیشه در حال یادگیری ...

چه طوری میشه اوتامیک بعد از اضافه شدن دیتا اسکرول بشه به پایین صفحه. مثلا شما یه باکس چت در نظر بگیر هر چه قدر پیام میاد اسکرول میره به پایین صفحه/

محمد رضا
محمد رضا
@salar.mohammad2013

تخصص: Full Stack Developer

این رو تست نکردم
یک پرسش دیکه ایجاد کنید توی راکت براش

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام