سلام ممنون میشم یه راه حل مناسب و اصولی برای مشکل پیشنهاد بدید
یا اگه اشتباه متوجه شدم یا روشم اشتباهه لطفا راه نماییم کنید
وقتی یک کامپوننت لایووایری ایجاد میکنم که یک فایل js مجزا داره چطور باید به پروژم اضافش کنم که فقط وقتی اون کامپوننت توی صفحه لود شد، این فایل js هم لود بشه. یعنی نمیخوام توی همه صفحات لود بشه. مثلا یک فیلد دیت پیکر دارم که کد های js رو داخل فایل مجزا گذاشتم و فقط میخوام با وجود این کامپوننت لود بشه. یه راه حلش اینه که میشه مثلا با vite('path/to/file.js')@ رو داخل یک stack@ با استفاده از push@ به لیاوت اصلی اضافش کرد یا حتی فقط فایل رو با تگ script و src به کامپوننت اضافه کرد. این کار رو انجام دادم ولی حتما باید یک بار صفحه رو رفرش کرد. مثلا اگر این فیلد داخل یک مُدال باشه یا سایت به صورت spa باشه دیگه کار نمیکنه! (حتما باید صفحه رو رفرش کنی) از روش هایی مثل event listeners (livewire:initialized , livewire:init) یا dispatch و... هم استفاده کردم اما کار نکرد! خیلی دنبال راه حل گشتم و از روش های مختلفی استفاده کردم حتی از هوش مصنوعی هم کمک گرفتم و نتیجهای نداشت.
@hesammousavi
داخل کامپوننت مد نظرتون @script رو هم تست کنید .
@script
@endscript
یا می تونید داخل متد mount از طریق
$this->js("
alert('test')
")
هم استفاده کنید
درسته میدونستم میشه از script@ هم استفاده کرد ولی نه برای فایل ها فقط برای اسکریپت هایی که قراره مستقیم توی همین فایل نوشته بشه کاربرد داره.
الان فهمیدم باید از assets@ استفاده کنم:
@assets
<script src="script.js"></script>
// or
@vite('path/to/file.js')
@endassets
ولی باگ عجیبی که برای من ایجاد کرده اینه که توی حالت develop (npm run dev) خوب کار میکنه ولی وقتی از پروژه build (npm run build) میگیرم دیگه به ارور های عجیب و غریب توی کنسول بر میخورم.
فایل ها لود میشن ولی انگار کد ها اجرا نمیشه!
مثل اینکه وقتی فایل ها از سمت کامپوننت لود بشن کد هاش اجرا نمیشه و حتما باید توی فایل اصلی یا داخل layout قرار داده بشه؟!
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟