ارتقاء به Angular 6: ساده سازی قسمت providers در CoreModule
ویژگی جدیدی به Angular 6 به نام tree-shakable providers اضافه شدهاست که نمونهای از کاربرد آن به صورت پیشفرض در حین «
ایجاد پروژهی «کتابخانه» توسط Angular CLI 6.0» ارائه میشود. به این معنا که با استفادهی از آن دیگر نیازی نیست تا سرویسهای سراسری برنامه را در قسمت providers مربوط به CoreModule ثبت کرد. همینقدر که یک سرویس سراسری را به صورت ذیل تعریف کنید:
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class MyCoreService { }
خاصیت providedIn آن کار ثبت این سرویس را به صورت خودکار انجام میدهد. تفاوت آن با حالت قبل این است که اگر این سرویس جایی در برنامه استفاده نشده باشد، tree-shakable خواهد بود. یعنی به صورت کد مرده در نظر گرفته شده و به prod bundle اضافه نمیشود که سبب کاهش حجم نهایی برنامه میگردد.
در این حالت تزریق وابستگیهایی که در مطلب «
تزریق وابستگیها فراتر از کلاسها در برنامههای Angular» نیز بحث شدند، پشتیبانی میشود:
@Injectable({
providedIn: 'root',
useClass: LazyFlightCancellingService,
deps: [NgModuleFactoryLoader, Injector]
})
export class FlightCancellingService { }
فقط مواردی مانند ثبت interceptors و حالتهایی که به همراه InjectionToken هستند، هنوز هم باید از طریق قسمت providers صورت گیرد.
به عنوان مثال کدهای مخزن کد «
اعتبارسنجی کاربران در برنامههای Angular» جهت استفادهی از این قابلیت
به روز شد.