آشنایی با فرم های واکنشی انگولار – از صفر تا صد


فرمهای واکنشی (Reactive) یک رویکرد مبتنی بر مدل برای مدیریت ورودیهای فرم هستند که مقادیرشان در طی زمان تغییر مییابند. با این که فرم های واکنشی انگولار ممکن است در نگاه نخست پیچیده به نظر برسند، اما زمانی که با آنها کاملاً آشنا شوید برایتان جالب خواهند بود. فرمهای واکنشی کاملاً قدرتمند هستند. قصد ما در این مقاله آن است که بخش کوچکی از مهمترین موارد مرتبط با آنها را به شما نشان دهیم تا بتوانید از آنها در عمل و در اپلیکیشنهای واقعی استفاده کنید.
قبل از هر چیز برای استفاده از آنها باید ماژول ReactiveFormsModule را در ماژول مطلوب خود ایمپورت کنید:
کنترل فرم
منظور از «کنترل فرم» (Form Control) کلاسی است که مقدار و حالت اعتبارسنجی هر مشخصه فرم را نگهداری میکند.
در واقع هر ورودی در فرم با یک کنترل فرم مرتبط خواهد بود.
زمانی که یک کنترل فرم ایجاد میکنید، میتوانید آرگومانهایی به سازنده ارسال کنید. در ادامه یک مقداردهی کنترل فرم را میبینید که نکات مهمی را نمایش میدهد.
پارامتر اول به نام FormState است که در آن مقدار اولیه کنترل فرم و این که باید در ابتدا غیرفعال باشد یا نه را تعیین میکنیم.
پارامتر دوم آرایهای از «اعتبارسنجها» (Validators) است که مشخص میسازد کنترل فرم نامعتبر است و اعتبارسنجی آن تأیید نشده است. برای نمونه در مثال فوق، کنترل فرم یک فیلد الزامی است و بیشینه طول آن 30 است. اگر مقدار ورودی این الزام را رعایت نکرده باشد، کنترل فرم به صورت نامعتبر (invalid) تعیین میشود. زمانی که این الزام رعایت شده باشد، معتبر (valid) خواهد بود.
انگولار برخی اعتبارسنجهای پیشساخته دارد که اغلب نیازها را برآورده میکنند و میتوانید در این صفحه (+) مشاهده کنید.
با این حال گاهی اوقات لازم میشود که برخی اعتبارسنجهای خاص برای مواردی داشته باشید که اعتبارسنجهای پیشساخته فوق برآورده نمیسازند. در این موارد میتوانید اعتبارسنج سفارشی بسازید.
گروه فرم
«گروه فرم» (Form Group) شامل گروهی از کنترلهای فرم است. این گروه میتواند شامل گروههای تو در تو نیز باشد. همچنین ممکن است شامل اطلاعاتی در مورد حالت اعتبارسنجی گروه به طور کلی باشد.
برای نمونه در مثال فوق، حالت گروه فرم تنها زمانی معتبر خواهد بود که مشخصههای نام و ایمیل پر شده باشند. با ایجاد یک گروه فرم در کامپوننت میتوانیم آن را به یک فرم در HTML متصل کنیم. مثال زیر روش انجام این کار را نشان میدهد:
چنان که در مثال فوق میبینید، ابتدا فرم را به گروه فرم ایجادشده اتصال دادهایم. سپس برای هر ورودی یک گروه کنترل اختصاص دادهایم. از آنجا که یک گروه فرم تو در تو داریم، یک منطقه برای آن به نام formGroupName اختصاص میدهیم و اجازه میدهیم که انگولار بداند که کنترلهای فرم در این ناحیه درون «گروه فرم تو در تو» قرار دارند.
خواندن از مقدار کنترل فرم
با استفاده از متد get در گروههای فرم میتوان یک کنترل فرم خاص را انتخاب کرده و مقدار آن را خواند یا برخی از متدهایش را فراخوانی کرد. در ادامه مقدار یک کنترل فرم خوانده شده و سپس برخی متدهایی که میتوان استفاده کرد مورد برسی قرار گرفتهاند.
ضمناً در فایل HTML:
آرایه فرم
«آرایه فرم» (Form Array) یک آرایه از کنترلهای فرم و گروههای فرم و حتی آرایههای فرم دیگر است. این یک ساختار مقدماتی اما ضروری برای مدیریت آرایهها با فرمهای انگولار است. فرض کنید میخواهید شماره تلفنهای کاربران را گردآوری کنید و به وی اجازه میدهید که یک شماره اولیه و سپس یک شماره دوم نیز وارد کند. بدین ترتیب میتوانید آرایه فرم phones را در گروه فرم خود اعلان کنید:
سپس نشانهگذاری (markup) را تنظیم کنید، و یک حلقه تعریف کنید که برای هر عنصر در آرایه فرم عمل میکند:
به روز رسانی مقادیر فرم
متدهای setValue و patchValue در فرمهای واکنشی انگولار امکان تعیین مقادیر کنترلهای گروه فرم را میدهد. هنگام استفاده از setValue باید یک شیء کامل ارائه کنید که به دنبال همه مشخصههای گروه فرم میگردد و مقادیر کنترل فرم را بازنویسی میکند. اگر یک شیء شامل همه مشخصههای گروه فرم عرضه نشود کار خواهد کرد. به مثال زیر توجه کنید:
از سوی دیگر متد patchValue میتواند برای بازنویسی هر مجموعهای از مشخصهها که در گروه فرم تغییر یافتهاند استفاده شود. از این رو میتوانید تنها برخی از فیلدها را برای بهروزرسانی مقادیر کنترلهای فرم ارائه کنید.
در ادامه مثالی از کاربرد آن را میبینید که از آن برای بهروزرسانی تنها بخش آدرس گروه فرم استفاده کردهایم:
باید توجه داشته باشید که متد setValue نه تنها برای گروههای فرم به صورت یک کلیت استفاده میشود بلکه روی کنترلهای فرم نیز اعمال میشود. از این رو میتوانید از آن برای بهروزرسانی مقدار یک کنترل فرم منفرد با فراخوانی مستقیمش روی آن کنترل فرم به صورت زیر استفاده کنید:
حالت اعتبارسنجی فرم
زمانی که گروه فرم با اعتبارسنجها، چنان که پیشتر نشان دادیم، ایجاد میشود، شامل اطلاعاتی در مورد حالت اعتبارسنجی فرم خواهد بود که مطابق مقادیری است که کنترلهای فرم نگهداری میکنند. برای نمونه اگر اعتبارسنجهای required روی کنترلهای فرم وجود داشته باشند، و همه مقادیر خالی باشند، فرم به صورت invalid تعیین میشود.
در مثال فوق شیوه بررسی معتبر بودن یا نبودن یک گروه فرم را دیدید. لازم به ذکر است که یک حالت اعتبارسنجی برای هر کنترل فرم نیز وجود دارد. از این رو در صورتی که حالت اعتبارسنجی کنترل فرم نامعتبر باشد، حالتهای اعتبارسنجی گروه فرم نیز نامعتبر خواهند بود.
قابلیت جالب دیگر گزینه manually set erros است. اگر بر حسب تصادف لازم باشد که گردش کاری خود را طوری تنظیم کنید که یک کنترل فرم صرفنظر از حالت اعتبارسنجها نامعتبر شود، روش انجام آن به صورت زیر است:
این تغییر موجب بهروزرسانی حالت اعتبارسنجی کنترل فرم میشود و به تبع آن حالت گروههای فرم نیز تغییر پیدا میکند. ضمناً میتوانید خطاهای کنترلهای فرم را نیز با null کردنشان به صورت زیر پاک کنید:
dirty و touched
احتمالاً دوست ندارید قبل از آن که به کاربر امکان ویرایش بدهید، خطایی در فرم نمایش دهید. بررسی وضعیتهای dirty و touched از نمایش خطاها تا زمانی که یکی از دو اتفاق زیر نیفتاده است جلوگیری میکند: مقدار تغییر یابید، کنترل dirty شود یا عنصر کنترل فرم تار شود و کنترل به صورت touched تنظیم شود.
بررسی حالتهای dirty و touched کنترلهای فرم کاملاً سرراست است و به صورت زیر انجام مییابد:
رصد تغییرات
یکی از جالبترین قابلیتهای فرمهای واکنشی امکان «اشتراک» (subscribe) در تغییرات گروه فرم یا کنترل فرم است. ایده کار کاملاً ساده است. ما روی یک عنصر مشترک میشویم و هر بار که مقداری تغییر یابد یک تابع callback تحریک میشود که میتوانیم منطقی برای آن تعیین کنیم. روش تعیین اشتراک به صورت زیر است:
یک مثال عملی و مفید برای این قابلیت، حل مشکل یکپارچهسازی API جستجوی آدرس است. فرض کنید یک ورودی از کاربر دارید که کد پستی خود را ارائه کرده است. میتوانید با افزودن subscription به کنترل مربوطه به محض این که کد پستی معتبری دریافت کردید API جستجوی آدرس را فراخوانی کنید و با استفاده از آن فیلدهای آدرس دیگر را که شامل نشانی، شهر، استان و غیره میشود را پر کنید:
اعتبارسنجهای سفارشی
چنان که پیشتر اشاره کردیم امکان ایجاد اعتبارسنجهای سفارشی برای مقاصد خاص وجود دارد. یک اعتبارسنج در واقع تابعی است که یک کنترل فرم را به عنوان پارامتر میگیرد و در صورتی که معتبر باشد، مقدار null و در صورتی که چنین نباشد، شیء خطا را بازگشت میدهد.
در ادامه مثالی از یک اعتبارسنج سفارشی میبینید. این اعتبارسنج برای این منظور ساخته شده است که بررسی کند آیا شماره CPF ارائه شده (سند شناسایی در برزیل) معتبر است یا نه.
شیوه استفاده از آن در یک اعلان کنترل فرم نیز به صورت زیر است:
فرمهای واکنشی انگولار بسیار قدرتمند هستند و مستندات آن (+) بسیار کامل است. با این که برخی اوقات لازم است برای یافتن موارد مورد نظر در آن عمیق شویم، اما در اغلب موارد میتوانید چیزی را که به دنبالش هستید به همراه مثالهایی پیدا کنید.
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای JavaScript (جاوا اسکریپت)
- آموزش مقدماتی AngularJS برای ساخت اپلیکیشن های تک صفحهای
- مجموعه آموزشهای برنامهنویسی
- ساخت رابط کاربری Login با انگولار (Angular) و متریال دیزاین – به زبان ساده
- ساخت اکستنشن کروم با انگولار — از صفر تا صد
==