در جلسه ی قبل به بررسی مفاهیم ماژول ها و کامپوننت ها در انگولار پرداختیم. این جلسه با ساخت بلوک های انگولاری با قالب ها و سرویس ها در انگولار می پردازیم.
قالب ها برای مشخص کردن نمای کامپوننت مورد استفاده قرار می گیرند. یک قالب شبیه به یک اچ تی ام ال منظم است، اما تفاوت هایی هم دارد. قالب ها می توانند کامپوننت ها را در خود جای دهند.
می توان گفت که تقریبا هر چیزی می تواند یک سرویس باشد. هر مقدار، فانکشن، یا عملی را که اپلیکیشن شما به آن احتیاج دارد، می توان یک سرویس نام گذاری کرد. هر سرویس را می توان به عنوان یک کلاس با هدفی مشخص تعریف کرد. هدف از ساختن سرویس ها در انگولار این است که این سرویس ها منابع را در بین کامپوننت ها به اشتراک بگذارند (اشتراک گذاری منابع در بین کامپوننت ها).
کلاس های کامپوننت باید بسیار سبک و کوتاه باشند، چرا که کار آن ها صرفا ایجاد تجربه ی کاربری است (کامپوننت ها واسطه ای بین «نمای اپلیکیشن» و «منطق های اپلیکیشن» هستند). کامپوننت ها وظیفه ی فیچ کردن اطلاعات (رفتن و گرفتن اطلاعات) از سرور را بر عهده ندارند یا اینکه مثلا درستی و نادرستی اطلاعات ورودی کاربر را چک نمی کنند و کاربران را لاگین و لوگ اوت نمی کنند. کامپوننت ها چنین وظایفی را به سرویس ها واگذار می کنند.
سرویس ها در انگولار از ضروریات یک اپلیکیشن ها و کامپوننت ها هستند و به کم حجم شدن برنامه نیز کمک می کنند.
سناریوی بالا به اصل جداسازی وظایف بسیار پایبند است. انگولار به خودی خود به این اصل را اجرا نمی کند، اما با ارائه ی سرویس ها و کامپوننت ها شرایطی را مهیا می کند تا خود شما در ساختار اپلیکیشن تان هر مسئولیت را به سرویس یا کامپوننتی اختصاص دهید. مسئولیت های مربوط به دریافت، انتقال و بررسی اطلاعات را به سرویس ها واگذار کنید و مسئولیت نماها را به کامپوننت واگذار نمائید.
در اپلیکیشنی که قرار است بسازیم، سه سرویس خواهیم داشت:
AnswersService
، QuestionsService
، CategoriesService
هر کدام از این سرویس ها مسئولیت خاصی که به آن اختصاص داده شده را بر عهده دارد. در این آموزش ما تمرکز خود را بر روی سرویس CategoriesService می گذاریم و در قسمت های بعدی، دیگر سرویس ها را نیز بررسی خواهیم کرد.
سرویس CategoriesService دارای متدهای زیر می باشد:
//gets all the question categories from a local json getCategories(){ return this.http.get("./assets/categories.json") .map((res:any) => res.json()) .toPromise(); } //finds a specific category by slug getCategoryBySlug(slug: string){ return this.getCategories() .then(data =>{ return data.categories.find((category) => { return category.slug == slug; }); }) }
منابع خارجی ای مثل دیتابیس و API ها و غیره از ضروریات اپلیکیشن هستند. چرا که باعث متعامل شدن اپلیکیشن ما با دنیای بیرون از خود می شوند (پویایی و عکس العمل برای اپلیکیشن ما ملزم به داشتن این منابع است).
مطالب زیادی راجع به بلوک های پایه ای سازنده ی بلوک های انگولار وجود دارد. بلوک هایی مثل Dependency Injection، دیتا بایندینگ، دایرکتیوها و غیره. در حتما در رابطه با این موضوعات تحقیق های بیشتری داشته باشید.
حالا بیایید تا کمی عمیق تر به ساختار پروژه ی خود نگاه کنیم و معماری اپلیکیشن خود را بیشتر بررسی کنیم تا نحوه ی برقراری تعامل و ارتباط بین بلوک های تشکیل دهنده ی اپلیکیشن را بهتر درک کنیم.
بعد از این که محیط توسعه ی انگولار را در بخش های قبل راه اندازی کردیم، می خواهیم نگاهی دقیق تر به آناتومی اپلیکیشن های انگولار بندازیم. درمراحل نصب CLI تعداد زیادی فایل برای ما درون پوشه ی اپلیکیشن مان ایجاد شد که به راحتی و بدون ترس، می توانیم بسیاری از آن ها را نادیده گرفته و توضیح ندهیم.
اما در ساختار پروژه سه فولدر و چند فایل بسیار مهم داریم:
در داخل فولدر یا دایرکتوری src کدهای خام و کامپایل نشده ی خود را پیدا خواهیم کرد. این دایرکتوری همان جایی است که اکثر کارهای مربوط به اپلیکیشن در آن انجام خواهد گرفت. زمانی که فرمان ng serve را اجرا می کنیم، کدهای درون دایرکتوری src تبدیل به کدهای جاوا اسکریپت می شوند تا برای مرورگر قابل فهم و نمایش باشند (ES5). این بدان معناست که ما می توانیم در یک سطح حرفه ای، از تایپ اسکریپت استفاده کنیم و هر گاه که می خواهیم آن را به ورژن جاوا اسکریپت (قابل فهم برای مرورگر) تبدیل می کنیم.
در درون دایرکتوری src ، چند فولدر مهم دیگر را پیدا خواهید کرد:
خب! دوستان به پایان قسمت پنجم از سری اموزش مقدماتی انگولار رسیدیم. با ما در قسمت بعدی همراه باشید.
منبع: سایت Angular Templates
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.