Standalone компоненты — это компоненты, которые могут существовать без необходимости объявления в NgModule, введенные в Angular 14 как часть постепенного отказа от NgModule-системы. Они представляют собой более простой и современный способ организации Angular-приложений.
Standalone компоненты:
declarations
массиве NgModuleКомпонент сам определяет свои зависимости:
@Component({
standalone: true,
imports: [CommonModule, ReactiveFormsModule, SomeOtherComponent],
template: `...`
})
export class MyStandaloneComponent {}
Могут быть:
import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';
@Component({
selector: 'app-standalone',
standalone: true,
imports: [CommonModule],
template: `
<h1>Я независимый компонент!</h1>
<p>Мне не нужен NgModule</p>
`
})
export class StandaloneComponent {}
const routes: Routes = [{
path: 'standalone-path',
component: StandaloneComponent
}];
Упрощенная архитектура:
Лучшая инкапсуляция:
Улучшенная производительность:
Гибкость разработки:
standalone: true
imports
компонентаПример миграции сервиса:
@Component({
standalone: true,
imports: [HttpClientModule], // Раньше импортировалось в NgModule
providers: [MyService] // Сервисы можно регистрировать на уровне компонента
})
export class MigratedComponent {}
Совместимость:
imports
)DI-иерархия:
Роутинг:
loadComponent
{ path: 'lazy', loadComponent: () => import('./lazy.component')}
@Component({
standalone: true,
imports: [CommonModule, MatButtonModule],
selector: 'lib-button',
template: `<button mat-button><ng-content></ng-content></button>`
})
export class StandaloneButton {}
// Главное приложение
{
path: 'micro-app',
loadComponent: () => import('micro-app/StandaloneComponent')
}
@Component({
standalone: true,
imports: [ReactiveFormsModule, DynamicFieldComponent],
template: `
<form [formGroup]="form">
<ng-container *ngFor="let field of fields">
<app-dynamic-field [field]="field"></app-dynamic-field>
</ng-container>
</form>
`
})
export class DynamicFormComponent {}