Загрузка...

Справочник декораторов

Справочник декораторов в Angular является ключевым инструментом для разработки современных веб-приложений и SPA, так как позволяет добавлять метаданные к классам, методам и свойствам, определяя их поведение в рамках Angular. Декораторы упрощают создание компонентов, управление состоянием, организацию потоков данных и контроль жизненного цикла элементов.
Наиболее важными декораторами являются @Component, @Directive, @Pipe, @Injectable и @NgModule. @Component определяет компонент пользовательского интерфейса, @Directive создаёт кастомные директивы для DOM, @Pipe выполняет преобразование данных в шаблонах, @Injectable позволяет использовать dependency injection, а @NgModule структурирует приложение в модули. Дополнительные декораторы, такие как @Input и @Output, обеспечивают обмен данными между компонентами, а @ViewChild и @ContentChild дают доступ к дочерним элементам и контенту шаблона.
В этом справочнике вы научитесь правильно использовать декораторы, создавать масштабируемые и оптимизированные компоненты, избегая распространённых ошибок, таких как prop drilling, ненужные повторные рендеры и мутации состояния. В результате разработчик сможет эффективно внедрять декораторы в реальных Angular-проектах, обеспечивая высокую производительность, поддерживаемость и безопасность приложения.

Базовый Пример

typescript
TYPESCRIPT Code
import { Component, Input } from '@angular/core';

@Component({
selector: 'app-user-card',
template: `     <div class="card">       <h2>{{ name }}</h2>       <p>Возраст: {{ age }}</p>     </div>
`,
styles: [`     .card {
padding: 16px;
border-radius: 8px;
background-color: #f5f5f5;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
text-align: center;
}
`]
})
export class UserCardComponent {
@Input() name!: string;
@Input() age!: number;
}

В данном примере декоратор @Component превращает класс UserCardComponent в полностью функциональный компонент Angular. Параметр selector задаёт HTML-тег для использования компонента, template и styles определяют визуальное отображение. Декораторы @Input позволяют передавать данные от родительского компонента, предотвращая prop drilling.
Angular автоматически управляет жизненным циклом компонента, обеспечивая корректную инициализацию, рендеринг и уничтожение. Изменения свойств, помеченных @Input, автоматически обновляют интерфейс, уменьшая лишние повторные рендеры. Пример демонстрирует, как декораторы управляют потоками данных, состоянием и структурой компонентов, применимыми в реальных проектах.

Практический Пример

typescript
TYPESCRIPT Code
import { Component, Input, Output, EventEmitter } from '@angular/core';

@Component({
selector: 'app-counter',
template: `     <div class="counter">       <h3>Счётчик: {{ count }}</h3>       <button (click)="increment()">+</button>       <button (click)="decrement()">-</button>     </div>
`,
styles: [`     .counter {
display: flex;
gap: 10px;
justify-content: center;
align-items: center;
}
`]
})
export class CounterComponent {
@Input() count: number = 0;
@Output() countChange = new EventEmitter<number>();

increment() {
this.count++;
this.countChange.emit(this.count);
}

decrement() {
this.count--;
this.countChange.emit(this.count);
}
}

Advanced Angular Implementation

typescript
TYPESCRIPT Code
import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';

@Component({
selector: 'app-smart-counter',
template: `     <div class="smart-counter">       <h3>Умный Счётчик: {{ value }}</h3>       <button (click)="increase()">+</button>       <button (click)="decrease()">-</button>     </div>
`,
styles: [`     .smart-counter {
background-color: #e0f7fa;
padding: 16px;
border-radius: 12px;
text-align: center;
}
`]
})
export class SmartCounterComponent implements OnInit, OnChanges {
@Input() value: number = 0;
@Output() valueChange = new EventEmitter<number>();

ngOnInit() {
console.log('SmartCounter инициализирован с значением:', this.value);
}

ngOnChanges(changes: SimpleChanges) {
if (changes['value']) {
console.log('Значение изменилось:', changes['value'].currentValue);
}
}

increase() {
this.value++;
this.valueChange.emit(this.value);
}

decrease() {
this.value--;
this.valueChange.emit(this.value);
}
}

SmartCounterComponent сочетает использование @Input, @Output и lifecycle hooks (OnInit, OnChanges) для управления состоянием и реактивного обновления интерфейса. Декораторы обеспечивают повторное использование компонента и предотвращают prop drilling и ненужные рендеры. Такой подход оптимизирует работу с потоками данных и состоянием, что критично для масштабируемых и поддерживаемых Angular-приложений.

Лучшие практики включают использование @Input только для необходимых данных и @Output для событий. Избегайте прямого изменения состояния или чрезмерного prop drilling. Для оптимизации производительности используйте ChangeDetectionStrategy.OnPush. Инструменты, такие как Angular DevTools, помогают отслеживать жизненный цикл и EventEmitter. Корректное использование декораторов обеспечивает безопасные, производительные и масштабируемые приложения Angular.

📊 Полная Справка

Angular Element/Method Description Syntax Example Notes
@Component Определяет компонент @Component({...}) @Component({ selector:'app-demo', template:'...' }) Основной декоратор
@Directive Создаёт директиву @Directive({...}) @Directive({ selector:'[highlight]' }) Управляет DOM
@Pipe Преобразует данные @Pipe({...}) @Pipe({name:'capitalize'}) Изменяет отображение данных
@NgModule Определяет модуль @NgModule({...}) @NgModule({ declarations:[], imports:[] }) Организует приложение
@Injectable Позволяет DI @Injectable({...}) @Injectable({ providedIn:'root' }) Для внедрения зависимостей
@Input Входные данные @Input() prop:type @Input() title:string Принимает данные от родителя
@Output События компонента @Output() event=new EventEmitter() @Output() clicked=new EventEmitter() Отправляет данные родителю
@HostListener Слушает события DOM @HostListener('click') handler(){} @HostListener('window:scroll') onScroll() Привязка событий
@ViewChild Доступ к дочерним @ViewChild(ChildComponent) child!:ChildComponent Манипуляция дочерним компонентом
@ContentChild Доступ к контенту @ContentChild(TemplateRef) tpl!:TemplateRef Управление проектируемым шаблоном
@HostBinding Привязка свойств @HostBinding('class.active') isActive=true Динамическое управление DOM

📊 Complete Angular Properties Reference

Property Values Default Description Angular Support
selector string none Селектор компонента все версии
template string none Шаблон компонента 2+
styles array string[] none CSS компонента
providers array [] Провайдеры DI 2+
inputs array [] Список @Input 4+
outputs array [] Список @Output 4+
animations array [] Анимации 4+
changeDetection string 'Default' Стратегия Change Detection 5+
encapsulation string 'Emulated' Инкапсуляция CSS 2+
standalone boolean false Standalone компонент 14+
imports array [] Импорт модулей 14+
schemas array [] Разрешение кастомных элементов 9+

Изучение Справочника декораторов позволяет создавать оптимизированные, повторно используемые и масштабируемые компоненты. Освоение потоков данных, управления состоянием и жизненного цикла обеспечивает разработку эффективных Angular-приложений. Рекомендуется изучать Dependency Injection, дополнительные lifecycle hooks, стратегии Change Detection и работу с RxJS для асинхронного управления данными, чтобы углубить профессиональные навыки.

🧠 Проверьте Свои Знания

Готов к Началу

Проверьте Свои Знания

Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему

3
Вопросы
🎯
70%
Для Прохождения
♾️
Время
🔄
Попытки

📝 Инструкции

  • Внимательно прочитайте каждый вопрос
  • Выберите лучший ответ на каждый вопрос
  • Вы можете пересдавать тест столько раз, сколько захотите
  • Ваш прогресс будет показан вверху