علی مانیان
3 سال پیش توسط علی مانیان مطرح شد
1 پاسخ

دسترسی به متغیر کامپوننت دیگر در livewire

سلام دوستان امیدوارم حالتون خوب باشه
سناریو کلی به این شکل هست که ما یه صفحه با عنوان register داریم. که با کامپوننت لایو وایری ساخته شد.
در فایل blade این کامپوننت اومدیم و از یسری کامپوننت لایووایری دیگه استفاده کردیم. به عنوان مثال صفحه ثبت نام شامل یسری input هست که هر کدوم از این input هارو ما با یک کامپوننت لایو وایری ایجاد کردیم.

// register.blade.php
<div>
    <livewire:first-name />
    <livewire:last-name />
    <livewire:phone-number />
    <livewire:password />
</div>

اما شاید بپرسید چرا؟ خب برای اینکه در درخواستی که ارسال میشه سمت سرور و برمیگرده حجم کمتری داشته باشه. به عنوان مثال ما input رمزعبور داریم که ایکون نمایش رمزعبور داره (👀) و زمانی که روش کلیک میکنیم اگر به صورت عادی باشه همه‌ی کامپوننت register برمیگرده اما زمانی که هر input در کامپوننت جداگانه‌ای باشه صرفا کد همون بخش برگشت داده میشه. (میدونم در این مورد خاص که اشاره شد میشه بدون ارسال درخواست سمت سرور نوع input پسورد رو عوض کرد. مثل راکت، سوال اصلیم این نیست!)
اما برگردیم سر بقیه ماجرا
خب زمانی که ما هر input رو در یک کامپوننت مجزا قرار دادیم طبیعتا رویدادهاش سمت بک در همون کامپوننت خودش هست. مقدارش هم همینطور!
من میخوام به مقدار input ها در کامپوننت register دسترسی داشته باشم.
خب چطور میتونم بدون هیچ مشکلی و به صورت بهینه به مقدار متغییر firstname که در کامپوننت firstname هست در کامپوننت register دسترسی داشته باشم؟!

چیزایی که بررسی کردم:

  1. استفاده از کامپوننت‌های خود لاراول (نه لایووایر) طبیعتا هیچ فرقی نداره و در ارسال و گرفتن درخواست کل صفحه رو بر میگردونه
  2. استفاده از emit, emitTo و... کار میداد ولی فکر میکنم باعث میشد یبار صفحه کامل توی response برگرده که اینم باز فرقی نداره (مطمئن نیستم شایدم من بد نوشتم)
  3. زمانی هم که خواستم خیلی معمولی دسترسی داشته باشم یعنی با استفاده از یک متد (getFirstName) یا مستقیم خود مقدار متغیر firstname رو در کامپوننت register بگیرم مقدار null برمیگردوند. (بازم شاید بد نوشتم!)

دوستانی که اطلاع دارین به چه صورتی میشه بهینه این کارو انجام داد لطفا کمک کنین ممنون😀
@hesammousavi @ali.bayat


ثبت پرسش جدید
حسین ستاری
تخصص : برنامه نویس
@Ho3ein 2 سال پیش مطرح شد
0

سلام ، برای emit اگر میخواین صفحه رفرش نشه میتونین به تگ اصلی کامپوننت این دستور رو بدین و دیگه رفرش نمیشه صفحه wire:ignore


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

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