Перейти к содержанию

Модули

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

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

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

Ключевая роль при создании 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
    ]
})