Модули


Angular модуль - это класс с декоратором @NgModule(), который служит изолирующей логической объединяющей структурой для компонентов, директив, фильтров и сервисов. Все перечисленные сущности определяются и конфигурируются с помощью @NgModule().

Angular приложение имеет модульную архитектуру и состоит, по крайней мере, из одного главного, или корневого, модуля. Все остальные относятся к второстепенным.

Сама библиотека @angular также модульная:

BrowserModule;
CommonModule;
FormsModule;
ReactiveFormsModule;
HttpClientModule;
RouterModule и др.
Ключевая роль при создании Angular модуля у декоратора @NgModule(), принимающего конфигурационный объект со свойствами:

imports - массив, где указывается список импортируемых второстепенных модулей;
exports - массив компонентов, директив и фильтров, которыми пользуются другие модули, если они импортируют текущий;
declarations - массив компонентов, директив и фильтров;
entryComponents - массив создаваемых динамически компонентов;
bootstrap - массив, в котором указывается компонент для загрузки;
providers - массив сервисов.
По назначению модули можно классифицировать следующим образом:

корневой;
функциональный;
маршрутизации;
для поставки сервисов.
Корневой модуль - главный в приложении. Именно он загружается первым и импортирует в себя все второстепенные модули, которые могут импортировать в себя другие второстепенные модули.

Только корневой модуль может определять свойство bootstrap и импортировать BrowserModule.

@NgModule({
declarations: [AppComponent],
imports: [
BrowserModule,
//
],
bootstrap: [AppComponent],
})
export class AppModule {}
Функциональный Angular модуль реализует логически связанную совокупность компонентов, директив или фильтров (например, модули библиотеки @angular/material).

Практически всегда для модулей этого типа определяется свойство exports.

@NgModule({
//
exports: [
AccountsComponent,
CreditsComponent,
DepositsComponent,
CreditsFilterDirective,
],
//
})
export class AppModule {}
Модуль маршрутизации нужен для определения иерархии маршрутов.

Angular модуль для поставки сервисов создается с использованием статического метода forRoot().

CoreModule и SharedModule
CoreModule - общепринятое название для модуля, используемого исключительно для поставки сервисов. Он не содержит в себе компонентов, директив и фильтров.

core.module.ts

@NgModule({
imports: [],
declarations: [],
providers: [],
})
export class CoreModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: CoreModule,
providers: [
AuthService,
LoggerService,
SettingsService,
],
}
}
}
SharedModule - общепринятое название для Angular модуля, служащим единым хранилищем для компонентов, директив и фильтров, которыми пользуются другие модули.

shared.module.ts

@NgModule({
imports: [
CommonModule,
FormsModule,
ImageCropperModule,
ScrollbarModule,
SlickModule,
SlickModule.forRoot(),
],
exports: [
CommonModule,
ImageCropperModule,
ScrollbarModule,
SlickModule,
AppLangsComponent,
AppTabFilterComponent,
AppFileUploadComponent,
ComponentPreloaderDirective,
],
declarations: [
AppLangsComponent,
AppTabFilterComponent,
AppFileUploadComponent,
ComponentPreloaderDirective,
],
})
export class SharedModule {}
@NgModule({
imports: [
//
CoreModule.forRoot(),
SharedModule
]
})