انگولار - کامپوننت در ایونیک ۳ در مقابل صفحه
میتوانید به من بگویید تفاوت بین ژنراتور Component و Page در اپلیکیشن Ionic 3 چیست؟ به نظر میرسد من میتوانم از هوکهای چرخه زندگی صفحه مانند ionViewWillLeave داخل کامپوننت هم استفاده کنم. پس در این صورت کی باید از هوکهای چرخه زندگی انگولار استفاده کنم؟ اگر یکسان هستند، پس چرا دو ژنراتور وجود دارد؟ امیدوارم بازخوردی در این مورد ارائه دهید.
تولیدکننده مؤلفه:
ionic generate component SubscribeTopicComponent
تولیدکننده صفحه:
ionic generate page LoginPage
پاسخ شماره ۱
با توجه به مکالمهای که در نظرات بود:
ممکن است از دیدگاه Angular یکسان باشد، اما صفحات و کامپوننتها در Ionic معنای متفاوتی دارند. از لحاظ Angular، هر دو فقط کامپوننت هستند، اما در زمینه Ionic، یک صفحه کامپوننتی است که به عنوان یک نمای کامل عمل میکند (ممکن است شامل کامپوننتهای تو در تو باشد)؛ ما صفحات Ionic را به عنوان یک مفهوم مستقل میبینیم. یک کامپوننت در بیشتر مواقع در برنامههای Angular فقط بخشی از یک کامپوننت بزرگتر خواهد بود، بنابراین فکر میکنم این بزرگترین تفاوت آن با صفحات است.
در مورد استفاده از هوکهای چرخه حیات Angular، من دوست دارم از آنها هنگام کار با کامپوننتهای تو در تو استفاده کنم، اما ترجیح میدهم از هوکهای چرخه حیات Ionic هنگام کار روی صفحات استفاده کنم. عمدتاً به این دلیل که چیزهایی مثل ionViewWillEnter در زمینه یک کامپوننت ساده چندان معنا ندارد، جایی که ngOnInit مناسب است. با این حال، من بعضی از هوکهای چرخه حیات Angular را در صفحات هم استفاده کردهام، مانند ngOnDestroy (از آن برای حذف تمام اشتراکها از یک صفحه هنگام خراب شدن آن صفحه استفاده کردم)، اما درست همانطور که شما گفتید، ionViewWillUnload به نظر میرسد راه درست برای انجام این کار باشد اگر بخواهیم از هوکهای چرخه حیات Ionic استفاده کنیم.
حدس میزنم که بیشتر هوکهای چرخه حیات آیونیک بیشتر به نحوه تعامل کاربر با کل صفحه مربوط میشوند (وارد یک صفحه میشود، از یک صفحه خارج میشود، میتواند وارد یک صفحه شود، میتواند از یک صفحه خارج شود...) و هوکهای چرخه حیات انگولار بیشتر به مراحل مختلف زندگی یک کامپوننت خاص مربوط میشوند (ورودیها مقداردهی اولیه شدهاند، چککننده تغییر بررسی کرده است که آیا تغییراتی در این کامپوننت وجود داشته است، ...)، که همانطور که میبینید، ممکن است اصلاً مستقیماً به تعامل کاربر مربوط نباشد و معمولاً مسائلی هستند که کاربر از آنها آگاه نیست.
من تقریباً مطمئن هستم که قانونی در مورد اینکه کدام رویکرد بهتر است وجود ندارد، اما مهمترین چیز پایداری است. من فکر میکنم منطقی است که از هوکهای چرخه عمر Ionic در کامپوننتهایی که صفحات هستند استفاده کنید و از هوکهای چرخه عمر Angular در داخل کامپوننتهای تو در تو استفاده کنید، اما میتوانید رویکرد متفاوتی استفاده کنید، تا وقتی که در سراسر برنامه بهطور مداوم از آن استفاده کنید.
پاسخ شماره ۲
دو ژنراتور جداگانه وجود دارد زیرا یک دکوراتور اضافی که به آیونیک اضافه شده بود: @IonicPage
این دکوراتور چند مزیت نسبت به یک کامپوننت ساده دارد.
مسیریابی - شما میتوانید مشخص کنید که URL صفحه چیست، چگونه به آن برسید و تاریخچه پیشفرض آن چیست. با این کار میتوانید بدون طی کردن مسیر ناوبری به هر صفحهای مستقیماً دسترسی پیدا کنید. مسیریابی به این صفحه همچنین میتواند با یک رشته به جای کامپوننت واقعی انجام شود.
بارگذاری تنبل - ماژول یک صفحه که این تزئینکننده را دارد به صورت پیشفرض هنگام رفتن به آدرس URL صفحه به صورت تنبل بارگذاری خواهد شد.
بدون وابستگی به ماژول برنامه - این بیشتر یک مورد مورد علاقه شخصی است، اما وقتی ماژولهایی ایجاد میکنید که صفحات هستند، نیازی به اضافه کردن آنها به ngModule اصلی خود ندارید و این بهصورت خودکار هنگام کامپایل انجام میشود.
برای مستندات بیشتر: https://ionicframework.com/docs/api/navigation/IonicPage/