Что такое модули (Modules) в Angular и как они используются?
Что такое модули в Angular?
В Angular модули — это основной способ структурировать и организовать код приложения.
Каждое Angular-приложение — это набор NgModule-ов, где один из них — корневой (AppModule
), а остальные могут быть фиче-модулями, общими модулями, лениво загружаемыми (lazy) и т.д.
Модуль:
- объединяет компоненты, директивы, пайпы, сервисы
- позволяет управлять зависимостями и повторным использованием
- помогает внедрять lazy loading и деление на фичи
Основы NgModule
Модуль — это обычный класс, помеченный декоратором @NgModule
:
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {}
Основные поля @NgModule
Поле | Описание |
---|---|
declarations | Компоненты, директивы и пайпы, принадлежащие модулю |
imports | Модули, которые нужны для работы текущего модуля |
exports | То, что будет доступно другим модулям |
providers | Сервисы и зависимости |
bootstrap | Главный компонент, запускаемый при старте (только в AppModule) |
Пример: разделение на модули
src/
├── app/
│ ├── app.module.ts
│ ├── features/
│ │ ├── auth/
│ │ │ ├── auth.module.ts
│ │ │ ├── login.component.ts
│ │ │ └── register.component.ts
auth.module.ts
@NgModule({
declarations: [LoginComponent, RegisterComponent],
imports: [CommonModule, FormsModule],
exports: [LoginComponent] // доступен в других модулях
})
export class AuthModule {}
Типы Angular-модулей
Тип | Назначение |
---|---|
AppModule | Корневой модуль (основа всего приложения) |
Feature Module | Для изоляции фич или разделов |
Shared Module | Содержит общие компоненты, директивы, пайпы |
Core Module | Содержит глобальные сервисы, доступные по всему приложению |
Lazy Module | Загружается по требованию (оптимизация загрузки) |
Lazy Loading модулей
Позволяет загружать модуль только при переходе к нему, улучшая время загрузки:
const routes: Routes = [
{
path: 'admin',
loadChildren: () => import('./admin/admin.module').then(m => m.AdminModule)
}
];
Используется для крупных секций: /admin
,/profile
, /dashboard
Совет:
Разбивайте приложение на модули, чтобы упростить масштабирование и повторное использование. Один модуль — одна ответственность.