آموزش NgRx مدیریت حالت حرفهای در Angular!

حفظ State صفحات در Angular به کمک Ngrx جامعه انگولار ایران

ایجاد یک جامعه ی آنلاین زمان بر است و لیندا به خود امید می داد که آنها مسیر شان را عوض نکرده اند بلکه راهی تازه را شروع نموده اند پس باید صبر پیشه کنند. او توضیح می دهد که "همه چیز بسیار آهسته پیش رفت. ولی کم کم پرداخت حق اشتراک ماهیانه آنلاین رواج پیدا کرد و مقدار آن هر ساله چندین برابر شد". در این دوره، ما قصد داریم یک برنامه کوچک موجود را انتخاب کنیم که بدون مدیریت حالت ساخته شده است. ما با شناسایی برخی از مشکلاتی که برنامه در شکل اولیه خود دارد، متوجه می‌شویم که عدم انجام مدیریت حالت چه عواقبی دارد. تابع createSelector تابع‌های نگاشت یک به چند را می‌گیرد و قطعه‌های مختلفی از حالت و یک تابع پروجکتور بازگشت می‌دهد که محاسبه را اجرا می‌کند. تابع پروجکتور در صورتی که قطعه حالت نسبت به بار قبل تغییر نکرده باشد، اجرا نمی‌شود.

به گفته ی خود لیندا "درست در همان زمان بود که او تصمیم گرفت در رفتارها و برخوردهای خود سیاست بیشتری داشته و بروکراتیک تر عمل نماید". در ۲۰۰۶ تعداد مشترکین به ۱۰۰.۰۰۰ نفر رسید و واینمن و همسرش ۱۵۰ کارمند خود را به همراه خانواده هایشان به دیزنی لند بردند تا موفقیت بزرگی که رقم خورده بود را جشن بگیرند. در این بخش برخی از مزایا و معایب این کتابخانه را بررسی می‌کنیم.

به اکشن editPlace گوش دهید، داده ها را دریافت کنید، سپس حرکت کنید و اقدام را ارسال کنید. در اکوسیستم Ngrx به کمک Effect ها به این امکان دست پیدا خواهیم کرد که با تاثیراتی که خارج از روال انگیولار و کامپوننت های آن هستند تعامل داشته باشیم . Effect ها دقیقا مشابه Reducer ها به اتفاقاتی که در یه App می افتد گوش می دهند و بلافاصله بعد از Dispatch شدن یک Action اگر شرایط تعریف شده را داشته باشند تاثیرات لازم بر روی آن Action را انجام می دهند که غالبا این تاثیرات ارسال یا دریافت اطلاعات به / از یک Api است . در اکثر حالت ها تغییرات از Component های ما شروع می شود ، در نظر بگیرید که ما در یک صفحه چک باکسی بر روی View داریم ( مثلا مشاهده رکورد های فعال و غیر فعال) و کلیک کردن کاربر بر روی این چک باکس منجر به dispatch شدن یک Action می شود . فریمورک های جاوا اسکریپتی توی چند سال اخیر تغییرات زیادی کردند و رقابت سنگینی بین اون ها شکل گرفته ، چند تا از اون ها مثل Angular ,React و Vuejs در سال های اخیر طرفدارهای زیادی پیدا کردند و هزاران مقاله برای مقایسه اون ها با هم تو سطح وب نوشته شده. در این دوره ما از ابتدا گام به گام کلون وب سایت Medium را با استفاده از فناوری های Angular و NgRx ایجاد می کنیم.

یک مثال ساده و مناسب از حالت اپلیکیشن می‌تواند لیستی از مشتریان باشد که در یک اپلیکیشن CRM نگهداری می‌شود. دانکن به عنوان یک مشاور نرم افزاری استرالیایی ، بنیانگذار Foodzone ، نویسنده Pluralsight که به دنیا می رود صحبت می کند و در رویدادها صحبت می کند و متخصصان فن آوری را آموزش می دهد. دانکن یک متخصص Angular است و زمان خود را بین تیم های آموزشی و مهارت آموزی تقسیم می کند تا بهترین روش ها را با Angular ، Foodzone در حال رشد و کار برای نوشتن کد برای مشتریان انجام دهد. یک راه حل سریع این است که بخوانید activatedRoute که در ngOnInit. اولین راه حل من ترکیبی از سرویس، افکت، روتر و مسیر فعال شده است. Alain Chautard یک متخصص توسعه دهنده Google در زمینه فناوری های وب و Angular است.او از سال 2011 با Angular JS کار خود را آغاز کرد.

به هر حال سال ۹۶ وقتی داشتیم تو شرکت یه پروژه جدید رو شروع می کردیم تصمیم گرفتیم که توی این پروژه از Angular برای پیاده سازی لایه UI استفاده کنیم . اون زمان که این کار رو شروع کردیم Angular روی نسخه ۴ بود و طی این چند سال چالش های متفاوتی برامون تو پیاده سازی لایه یو آی پیش اومد که هر کدومشون داستان های مفصل خودشو داشت . سپس ما می‌خواهیم برنامه را مجدداً فاکتورسازی کنیم، و مدیریت حالت را گام به گام به چندین صفحه برنامه اضافه می‌کنیم. ما می‌خواهیم با ویژگی‌های Authentication برنامه شروع کنیم و سپس به بخش مدیریت داده‌های موجودیت می‌رویم. بسیار خوب، با همه ویژگی‌ها کار می‌کند، اما مؤلفه ما وظایف بسیاری را انجام می‌دهد، مانند ارسال اقدامات و تغییر مسیر ناوبری. وقتی به ویژگی های بیشتری نیاز داشته باشیم چه اتفاقی می افتد؟ ما می توانیم همه چیز را با استفاده از روتر NgRx ساده کنیم که باعث کاهش میزان کد و مسئولیت در اجزای ما می شود.

کتابخانه Ngrx برای ما تابع select را فراهم کرده که بخشی از State ها را برای ما Fetch کرده و تغییرات لازم را انجام داده و در اختیار ما قرار می دهد . برای هر درس کد منبع درس را دریافت خواهید کرد، بنابراین دیدن پیشرفت و دریافت یک برنامه کاربردی در هر درسی که می‌خواهید آسان است. در حالکیه لیندا اعتقاد دارد تنها در زمان و مکان مناسبی حضور داشته، سخت است بدل شدن یک دامنه ی ۳۵ دلاری به کسب و کاری ۱.۵ میلیارد دلاری را حاصل یک اتفاق بدانیم. اینکه اعضا و کارمندان شرکت همانند یک خانواده با یکدیگر در تعامل باشند همواره برای لیندا حائز اهمیت بوده و او حتی همیشه تلاش داشته تا افراد تحت استخدام خود را با اسم کوچک بشناسد و صدا بزند. ولی رشد سریع کمپانی و رسیدن تعداد کارمندان به عدد ۵۰۰، رفته رفته چالش هایی تازه را پدید می آورد و سبب می گردد واینمن در ایده آل های خود بازنگری نماید.

من به شخصه بر روی اثری که از همکاری دو کمپانی با یکدیگر پدید می آید متمرکز هستم. روز های سیاهی بود و حتی خودم تردید داشتم که می توانیم این کسب و کار را ادامه دهیم یا خیر. متد createEffect یک تابع می‌گیرد که یک observable و یک شیء پیکربندی (اختیاری) به عنوان پارامتر بازگشت می‌دهد. ما روتر را حذف کردیم و وابستگی های مسیر را فعال کردیم، پارامتر URL را همگام نگه داشتیم و آن را با انتخابگرهای روتر ترکیب کردیم. به روز رسانی روش لغو در PlacesComponent و ارسال کنید cancelPlace عمل. به جای درخواست HTTP، از وضعیت خود استفاده می کنم زیرا افکت ngrx init همیشه هنگام ثبت اثر، وضعیت من را به روز می کند.

اگرچه سازگار با نسخه قبلی است، اما دارای عملکردهای بسیار جدیدی است که تقریباً یک کتابخانه مدیریت دولتی کاملاً جدید است. NgRx اشتراک در observanle بازگشتی از سوی تابع پشتیبان را مدیریت می‌کند و از این رو نیازی به اشتراک یا لغو اشتراک دستی نیست. به علاوه اگر خطایی در زنجیره عملگر رخ دهد، NgRx یک observable جدید بازگشت می‌دهد و مجدداً مشترک می‌شود تا مطمئن شود که تأثیر جانبی همواره اجرا خواهد شد. چنان که می‌بینید، این تابع در حالت اولیه تابع‌های تغییر حالت «یک به چند» را می‌گیرد که شیوه واکنش به اکشن‌های مختلف را تعریف می‌کند. هر کدام از این تابع‌های تغییر حالت، حالت جاری و پارامترهای اکشن را به عنوان آرگومان می‌گیرند و یک حالت جدید بازگشت می‌دهند. به بیان ساده حالت اپلیکیشن از داده‌هایی تشکیل یافته است که از طریق فراخوانی‌های API، ورودی‌های کاربر، حالت UI ارائه شده، ترجیحات اپلیکیشن و غیره به دست می‌آید.

کمپانی آنها دچار بحرانی جدی گشت، واینمن و هون ۷۵ درصد کارمندان خود را اخراج کردند و تنها ۹ نفر در استخدام شان باقی ماند. دفتر و مقر برگزاری دوره های لیندا نیز کوچک تر گشت و سعی را بر این گذاشتند تا واحد هایی با قیمت ارزان تر اجاره نمایند. در پایان این دوره، با مفاهیم مدیریت دولتی و به طور کلی راه حل متمرکز فروشگاه احساس راحتی خواهید کرد. سلکتور یک تابع خالص است که حافظه اجرای قبلی را نگهداری می‌کند. تا زمانی که ورودی تغییر نیافته باشد، خروجی محاسبه مجدد نمی‌شود.

اما رفته رفته به این نتیجه می رسند که این فروش و ادغام دو کمپانی با یکدیگر احتمالاً امری منطقی و موثر خواهد بود. هر دو شرکت به نوعی تلاش داشته اند به افراد کمک کنند تا وضعیت شغلی خود را بهبود بخشند و احتمالاً در کنار یکدیگر بسیار بهتر از گذشته می توانند این هدف را محقق کنند. کمی بعد کتاب "طراحی گرافیک های تحت وب" که به باور بسیاری اولین کتاب ساده و قابل درک توسط عموم در رابطه با حرفه طراحی وب بود، توسط افراد بسیاری در سراسر دنیا به عنوان یک مرجع غیر فنی مورد استفاده قرار می گرفت و محبوبیتی غیر قابل باور به دست آورده بود. مفاهیم اصلی Actions، Reducers، Effects، Entities، و Selectors بدون تغییر باقی می‌مانند، اما اکنون یک API کاملاً جدید برای مدیریت این مفاهیم به روشی بسیار کم‌تر داریم. همچنین، ما شامل داده های NgRx هستیم که یک روش جدید و بسیار قدرتمند برای مدیریت داده های موجودیت است. اینها همه سؤالات مهمی هستند که در این دوره آموزشی به آنها خواهیم پرداخت، زیرا یک تور راهنمای گسترده از اکوسیستم NgRx به شما ارائه می دهیم.

در این کد در واقع ما به اتفاقاتی که در Component مورد نظر می افتد گوش می دهیم و اکشن هایی که منجر به ایجاد Effect می شود را شناسایی کرده و تاثیرات لازم را اعمال می کنیم . این تصویر قسمت جستجو مربوط به فرم مشاهده کاربران می باشد ، کاربر از طریق کنترل های موجود می تواند بر اساس نام ، نام خانوادگی و یا نام کاربری در بین کاربران اقدام به جستجو نماید . دکمه های "جستجو و پاک کردن" می تواند منجر به ایجاد یک Action شود . ایجاد فرهنگ سازمانی برای شرکتی با بیش از ۵۰۰ کارمند کاری بسیار دشوار خواهد بود ولی حتی آنچه از این مسئله نیز دشوارتر به حساب می آید پایه ریزی درست و مطابقت دادن افراد با فرهنگ یاد شده است. اینکار در زمانی که یک شرکت نوپا و کوچک محسوب می شود چندان سخت نیست و شاید ضروری هم نباشد ولی با رشد آن صورت پذیرفتنش الزام می یابد.

هدف اصلی این مقاله ارائه دانشی در این مورد است تا خوانندگان بتوانند با سرعت و سهولت بیشتری طرز کار با NgRx در انگولار را بیاموزند. من به تعطیلات خود در منورکا ادامه می دهم، بنابراین امروز صبح وقت گرفتم تا یاد بگیرم و تمرین کنم که چگونه وضعیت را در مسیریاب زاویه ای مدیریت کنم و چگونه روتر ngrx می تواند به بهبود کد من کمک کند و مسئولیت اجزای من را کاهش دهد. معماری React.js بصورت Flux طراحی شده.این معماری به این صورت هست که کامپونت Parent که تمام منطق ما اینجا قرار داره و State Full هست دیتا رو فقط در یک مسیر به کامپونت های Child که State Less هستند منتقل میکنه. به این روش اصطلاحا One Way Date Flow میگن.یعنی دیتا که در کامپونت A قرار داره و ما در کامپونت D بهش نیاز داریم مسیر کامپونت B و C رو رد میکنه تا به مقصد برسه. حالا اگه این مسیر رو با تعداد زیادی کامپونت فرض کنید و دیتا رو از بین این کامپونت ها عبور بدیم که شاید به اون دیتا احتیاجی هم نداشته باشند. در تصویر زیر روال اصلی Ngrx برای مدیریت state صفحات رو می بینیم که هر کدوم از این بخش ها عملیاتی رو انجام میدن و ما رو به هدف نهایی می رسونن .

من می توانم ترکیب کنم selectPlaces انتخابگر با selectRouterParams برای بدست آوردن selectPlaceById. انتخابگرهایی را برای خواندن از روتر و ترکیب با انتخابگرهای دیگر برای کاهش صفحه دیگ در اجزای ما فراهم می کند. اگر مکان دیگری را انتخاب کنید و به صفحه برگردید، ممکن است انتخاب به‌روزرسانی نشود و ممکن است مکان قبلی را بارگیری کنید. همچنین، با اتصالات کند، ممکن است با خطای “یافت نشد” مواجه شوید زیرا هنوز در حال بارگیری است. ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی می‌نویسم. در مقابل Pure Function ها ، Impure Function ها قرار دارند که مقدار خروجی آن ها مستقیما از ورودی آن ها تاثیر نمی گیرد و ممکن است با یک ورودی خاص در مواقع مختلف خروجی های متفاوتی داشته باشند ، توابعی مانند Date.now , Math.random مثالی از Impure Function ها هستد .

طی آن دوران لیندا به صورت خودآموز در حال یادگیری طراحی وب بود و تلاش داشت تا آموخته هایش را با سایرین نیز به اشتراک بگذارد. هر چند این روزها مسئله یاد شده امری عادی به حساب می آید اما در اواسط دهه نود -روزگاری که هنوز یوتیوبی نبود- یادگیری طراحی وب به صورت خودجوش چندان مسئله رایجی محسوب نمی گشت. همچنین می‌خواهیم یاد بگیریم که چگونه از داده‌های NgRx حداکثر استفاده را ببریم و نحوه سفارشی‌سازی آن را برای مدیریت داده‌های موجودیت با حداقل کد برنامه بیاموزیم. ما NgRx را پوشش می‌دهیم و در عین حال بهترین روش‌ها مانند بهداشت Action خوب را در نظر داریم. اغلب افرادی که به تازگی شروع به کار با NgRx در انگولار می‌کنند، آن را در ابتدا دشوار می‌یابند. ممکن است نیاز به مطالعه و پژوهش زیادی برای درک مبانی مقدماتی NgRx داشته باشید.

پکیج ngrx/store@ توسط Rob Wormald یکی از اعضای تیم Angular بر اساس Redux با کتابخانه RxJs نوشته شده و در حال حاضر بیش از 150 نفر تو این پروژه مشارکت داشتند و اونو گسترش دادند. این پکیج به شما این اجازه رو میده که داخل Angular اپلیکیشن های Reactive بر اساس Redux Pattern بسازید.توسط ngrx@ ما میتونیم مدیریت بهتری روی state های خودمون داشته باشیم و از ویژگی هایی مثل کنترل Side Effect و Entity Collection و کنترل Route و... بعد از انجام تمام این کارها در کامپوننت های مورد نظر باید تغییراتی را اعمال کنیم تا بتونیم اطلاعات مورد نیاز را به کمک selector ها از store خوانده و کامپوننت را با وضعیت مورد نظر به روز کنیم. در طی سال های اخیر کمپانی واینمن توسط افراد گوناگونی که در حرفه ی خود بهترین هستند دوره های آنلاین متعددی را ایجاد نموده و سعی کرده نشان دهد این دوره های آنلاین راه و روش یادگیری را برای همیشه متحول کرده اند. با تنها ۱۰۰۰ نفر پرداخت کننده حق اشتراک ماهیانه، بقای کمپانی به نظر بسیار سخت می رسید.

این به خواندن اطلاعات از روتر، مانند پارامترهای پرس و جو، داده ها، عنوان و موارد دیگر، با استفاده از لیستی از انتخابگرهای داخلی ارائه شده توسط تابع کمک می کند. فروشگاه روتر NgRx اتصال وضعیت خود را با رویدادهای روتر و خواندن داده‌ها از روتر با استفاده از انتخابگرهای داخلی آسان می‌کند. گوش دادن به اقدامات روتر تعامل با داده ها و جلوه ها را ساده می کند و اجزای ما را از وابستگی های اضافی مانند روتر یا مسیر فعال دور نگه می دارد. بسیار خوب، من وضعیت را آماده کرده ام، اما هنوز هنگام دریافت شناسه از وضعیت URL مشکل دارم. ابتدا اضافه کنید getById روش در places.service.ts، با استفاده از شناسه مکان را بدست می آورد.

در این دوره، اصول اولیه، بهترین روش‌ها و سناریوهای رایجی که برای شروع سریع با NgRx نیاز دارید را یاد خواهید گرفت. به طور کلی استور اکشن‌ها را به طور مکرر از بخش‌های مختلف اپلیکیشن دریافت می‌کند. همچنان که در پیاده‌سازی قبل هم دیدیم، هر بار که اپلیکیشن یک اکشن دریافت می‌کند، یک شیء حالت از سوی استور ارسال می‌شود و این شیء حالت دوباره وارد تابع نگاشت می‌شود و UI را به‌روزرسانی می‌کند. با استفاده از افکت‌ها می‌توان کارهای خاصی در زمان ارسال اکشن به استور اجرا کرد. زمانی که یک کاربر با موفقیت به حساب خود در یک اپلیکیشن وارد می‌شود یک اکشن با نوع Login Action به استور ارسال می‌شود که حامل اطلاعات کاربر در payload است.

این پترن توسط شخصی بنام Dan Abramov یکی از اعضای تیم React.js برای حل مشکلاتی که با State داشتن بوجود امد. قبلا اشاره کردیم که Reducer ها از دسته ی Pure Function ها هستند ، اما در مورد این نوع از توابع تعریفی ارائه نکردیم . ریداکس (Redux) یک پترن برای مدیریت کردن State نرم افزار است . این Pattern بسیار شبیه به پترن Flux که متعلق به Facebook ئه هست و همین طور از Flux الهام گرفته است . در ۲۰۰۷ تصمیم بر این شد تا یک مدیرعامل جهت اداره ی بهتر مجموعه به آن اضافه گردد.

در بیشتر موارد، Angular Router و ActivatedRoute را در کامپوننت‌های خود ترکیب می‌کنیم تا این موارد را حل کنیم و این مسئولیت را به کامپوننت‌ها محول می‌کنیم یا در موارد دیگر ترکیبی بین اجزا و افکت ایجاد می‌کنیم تا سعی کنیم آن را حل کنیم. در پست های بعدی فریمورک ngrx@ رو باز تر میکنیم و به پکیج هایی که داخلش قرار دارن میپردازیم و ساخت یک اپلیکیشن رو شروع میکنیم. همینطور که از اسمش مشخصه رویدادهای مختلفی داخل برنامه ما اتفاق میفته مثل click و ... که اپلیکیشن نسبت به این رویداده ها واکنش نشون میده و ساختار کامپونت های ما رو اساس State های مختلف بروز میکنه. بدین ترتیب کتابخانه Ngrx بر روی Application ما نصب و به فایل package.json اضافه خواهد شد .

لطفاً توجه داشته باشید که عموماً از این روش برای ایجاد افکت استفاده نمی‌کنیم. این تنها یک مثال برای توضیح وقایعی است که در پشت پرده رخ می‌دهند. فرض کنید اپلیکیشن شما شامل دو ماژول قابلیت است که User و Product نام دارند. هر کدام از این ماژول‌ها بخش‌های متفاوتی از حالت کلی را مدیریت می‌کنند. زمانی که تعداد کامپوننت‌ها افزایش می‌یابد، ارسال اطلاعات بین کامپوننت‌ها صرفاً از طریق دکوراتورهای Input@ و Output@ دشوار می‌شود.

در نهایت تغییرات توسط کاموپوننت و به واسطه selector ها دریافت میشود. مدتی است که بسیاری تصور می کنند دوره های آموزش ویدئویی می توانند آینده آموزش به حساب بیایند. می‌دانید چگونه با استفاده از Ngrx Schematics، بخش‌هایی از راه‌حل را به‌سرعت داربست کنید، و چگونه Ngrx DevTools را از ابتدا راه‌اندازی کنید، از جمله ادغام روتر. هدف عمده این مقاله ایجاد آشنایی مقدماتی با مفاهیم NgRx بوده است. قلاب‌های چرخه حیات افکت‌ها به ما اجازه می‌دهند تا زمانی که افکت‌ها ثبت می‌شوند، اکشن‌ها را راه‌اندازی کنیم، بنابراین می‌توانم اکشن loadPlaces را راه‌اندازی کنم و حالت را آماده کنم.

برای هر درس کد منبع درس را دریافت می‌کنید، بنابراین مشاهده پیشرفت و دریافت یک برنامه کاربردی در هر درسی که می‌خواهید بدون تایپ مجدد کد از صفحه آسان است. واینمن زمانی که متوجه می شود لینکدین قصد خرید کمپانی اش را دارد، در ابتدا شوکه می گردد. او و همسرش هرگز به دنبال فروش شرکت خود و یافتن مشتری برای آن نبوده اند و البته در سن ۶۰ سالگی وی هنوز هم احساس می نموده که برای بازنشستگی بسیار زود است. محبوب ترین کتابخانه مدیریت دولتی در فضای Angular NgRx است و دلایل خوبی هم دارد. آخرین نسخه NgRx احتمالاً یکی از مهم ترین نسخه های اخیر در کل اکوسیستم Angular است.

روزگاری که ایده یاد شده شکل گرفت و سپس عملی گشت (ارائه خدمات به صورت آنلاین) تماشای فیلم بر روی کامپیوترها تازه در حال رواج یافتن بود. لیندا دات کام تصمیم گرفت در ازای سرویسی که ارائه می کند هزینه حق اشتراکی ۲۵ دلاری را به صورت ماهیانه دریافت نماید. در طول دوره ما قصد داریم گام به گام ماژول NgRx Store، NgRx Effects را به طور گام به گام معرفی و توضیح دهیم، ما قصد داریم به طور مفصل به NgRx Entity و فرمت Entity بپردازیم، می خواهیم نصب و انجام دهیم. گشت با راهنما از NgRx Dev Tools، فروشگاه مسیریاب NgRx، و اشکال‌زدای سفر در زمان. اگر dispatch مقدار پیش‌فرض true را در شیء پیکربندی داشته باشد، متد createEffect یک ‎ مشترک می‌شود و اکشن‌های دریافتی را به استور ارسال می‌کند.

برای استفاده از تابع سلکتور ایجاد شده باید یک آرگومان به عملگر select ارسال شود. اگر اکشن دریافتی را به نوع متفاوتی از اکشن در زنجیره عملگرها نگاشت نکنید، باید dispatch را روی flase تنظیم کنید. در غیر این صورت اجرای آن موجب تولید یک حلقه نامتناهی می‌شود، زیرا همان اکشن دوباره ارسال می‌شود و در استریم actions$ بارها و بارها دریافت می‌شود. برای نمونه dispatch را در کد زیر نباید روی false تنظیم کنید، زیرا اکشن اصلی را به نوع متفاوتی از اکشن در زنجیره عملگرها نگاشت می‌کند. اگر مجبور باشید اطلاعات را از کامپوننت سه به کامپوننت شش ارسال کنید، باید چهار بار پرش کنید و سه کامپوننت دیگر را نیز درگیر کنید.

NgRx به یک گروه از کتابخانه‌ها گفته می‌شود که از الگوی ریداکس الهام گرفته‌اند. همان طور که از نام آن مشخص است NgRx به طور خاص برای اپلیکیشن‌های انگولار به عنوان یک راه‌حل مدیریت حالت نوشته شده است. من یاد گرفتم که چگونه با استفاده از پارامترهای URL با NgRx Router Store در Angular، حالت را مدیریت کنم. من همچنین NgRx را با Angular Router برای کنترل وضعیت و ناوبری ادغام کردم و اجزای خود را تمیز نگه داشتم. این رویکرد به مدیریت بهتر حالت کمک می کند و با انتخابگرهای مسیریاب ترکیب می شود تا داده های روتر را به راحتی بخواند. از آنجا که، ما یک نمای کلی از روتر NgRx داریم، پس بیایید پیاده سازی آن را در پروژه شروع کنیم.

ارائه ی کتابخانه ای ویدئویی به جای اینکه از افراد درخواست شود تا در دوره هایی مشخص با روال معمول و پیوسته شرکت نمایند، عاملی بوده که سبب گشته شیوه ی آموزشی لیندا دات کام نسبت به سایرین کاملاً متفاوت گردد. درست در همان زمان و در سال ۱۹۹۵ واینمن آدرس ایمیل فردی را مشاهده نمود که به صورت بود و مشتاق شد بداند آیا دامنه ی لیندا نیز برای ثبت کردن در دسترس قرار دارد یا خیر. وی این دامنه را خریداری و وبسایتی تحت آن راه انداخت تا از طریقش بتواند با دانش آموزان و همچنین خوانندگان کتاب خود ارتباط برقرار نماید. مرحله آخر باز کردن است place.effect.ts، اضافه کردن returnHomeEffects اثر، تزریق روتر، و گوش دادن به cancelPlace عمل. استفاده کنید router.navigate برای تغییر مسیر زمانی که اقدام ارسال می شود.


برنامه نویسی دات نت