> Какие основные сущности существуют в Angular до версии 16, исключая сигналы? (Angular)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: LeverX
Стек: Angular
> Пример ответа
Короткий ответ
До Angular 16 основными сущностями были: компоненты (components), директивы (directives), сервисы (services), модули (NgModules), pipes, dependency injection, lifecycle hooks, ViewChild/ContentChild, EventEmitter, ChangeDetectionStrategy, а также Zone.js для обнаружения изменений. Эти сущности формировали архитектуру приложения и управление состоянием.
Подробное объяснение
В Angular до версии 16 ключевые сущности включали:
- Компоненты - строительные блоки UI с шаблоном, стилями и логикой, управляемые через
@Componentдекоратор. - Директивы - структурные (
*ngIf,*ngFor) и атрибутные (ngClass,ngStyle), изменяющие DOM или поведение элементов. - Сервисы - классы с бизнес-логикой, регистрируемые в DI и инжектируемые через конструктор.
- Модули (NgModules) - организационные единицы, группирующие компоненты, директивы, pipes и сервисы, с
@NgModuleдекоратором. - Pipes - трансформация данных в шаблонах (например,
date,async). - Dependency Injection - механизм предоставления зависимостей через провайдеры и иерархию инжекторов.
- Lifecycle hooks - методы типа
ngOnInit,ngOnChanges,ngAfterViewInit,ngOnDestroyдля управления жизненным циклом. - ViewChild/ContentChild - декораторы для доступа к дочерним элементам или контенту.
- EventEmitter - для эмиссии событий из компонентов.
- ChangeDetectionStrategy - стратегии обнаружения изменений (Default, OnPush).
- Zone.js - патч браузерных API для автоматического обнаружения изменений.
- Router - модуль маршрутизации с guards, resolvers и lazy loading.
- FormsModule/ReactiveFormsModule - управление формами.
- HttpClient - работа с HTTP.
- @Input/@Output - декораторы для передачи данных между компонентами.
Эти сущности работали в связке: модули организовывали приложение, компоненты и директивы строили UI, сервисы обеспечивали логику, DI управлял зависимостями, а Zone.js отслеживал изменения.
На практике
На практике разработчики использовали NgModules для feature modules и shared modules, сервисы для state management (часто с RxJS), а компоненты с ChangeDetectionStrategy.OnPush для оптимизации производительности. Lifecycle hooks применялись для инициализации данных (ngOnInit) и очистки подписок (ngOnDestroy). EventEmitter и @Output использовались для коммуникации child-to-parent. Dependency injection позволяла легко переопределять сервисы для тестирования.
Пример кода
TYPESCRIPT// Компонент@Component({selector: 'app-user',template: `<p>{{ user.name }}</p>`,changeDetection: ChangeDetectionStrategy.OnPush})export class UserComponent implements OnInit, OnDestroy {@Input() user: User;@Output() userClicked = new EventEmitter<User>();private subscription: Subscription;constructor(private userService: UserService) {}ngOnInit() {this.subscription = this.userService.getUser().subscribe();}onUserClick() {this.userClicked.emit(this.user);}ngOnDestroy() {this.subscription?.unsubscribe();}}// Модуль@NgModule({declarations: [UserComponent],imports: [CommonModule],exports: [UserComponent],providers: [UserService]})export class UserModule {}
Как отвечать на собеседовании
Начни с перечисления ключевых сущностей, затем сгруппируй их по функциональности: компоненты/директивы для UI, сервисы/DI для логики, модули для организации, Zone.js для обнаружения изменений. Упомяни, что эти сущности формировали архитектуру до введения standalone components и signals. Покажи понимание их взаимодействия: например, как DI и модули влияют на область видимости сервисов. Если спросят про изменения в Angular 16+, кратко отметь, что signals и standalone стали альтернативой Zone.js и NgModules.
Что проверяет интервьюер
Интервьюер оценивает:
- Глубину понимания архитектуры Angular, а не просто знание названий сущностей.
- Умение объяснить, как сущности взаимодействуют (например, как DI работает с модулями).
- Осознание trade-offs: почему Zone.js может быть проблемой, зачем нужен OnPush.
- Знание эволюции фреймворка - понимание, что было до standalone и signals.
- Практический опыт: как эти сущности используются в реальных проектах.
Типичные ошибки
- Путаница между структурными и атрибутными директивами.
- Непонимание разницы между
@ViewChildи@ContentChild. - Игнорирование роли Zone.js в обнаружении изменений.
- Утверждение, что NgModules обязательны (они были, но не являются строго обязательными в ранних версиях).
- Забывание про lifecycle hooks или их неправильное применение (например, вызов HTTP в конструкторе).
- Смешивание понятий: EventEmitter - это не Observable, хотя extends Subject.
> Похожие задачи по frontend
Как реализовать обработку ввода пользователя в поисковую строку в Angular с использованием реактивных форм
В чем разница между Ahead-of-Time и Just-in-Time компиляциями в Angular?
Как работает механизм Change Detection в Angular и из чего он состоит?
Что такое NgZone и как он взаимодействует с Change Detection в Angular?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью