Загрузка…
Загрузка…
Оба участвуют в создании компонента, но на разных фазах жизненного цикла — любимый junior-вопрос.
constructor — создание экземпляра и DI. Для декораторных @Input значения ещё могут быть не проставлены.ngOnInit — хук после первой установки inputs; классическое место старта загрузки/подписок, завязанных на входы.export class UserCard implements OnInit {
userId = input.required<string>();
private readonly api = inject(UserApi);
constructor() {
// DI и простая инициализация полей
}
ngOnInit(): void {
// старт логики, если опираетесь на @Input декораторы
}
}С signal inputs данные доступны как сигналы сразу; часто используют effect, rxResource/resource и меньше нужды в ngOnInit. Порядок всё равно важен: construction → bind inputs → ngOnInit → view/content init.
Не делайте тяжёлый HTTP и подписки «на всякий случай» в конструкторе. DI — да; side effects — осознанно в хуках/эффектах с учётом lifecycle.
Спросите порядок относительно @Input. Путаница constructor/ngOnInit — маркер, что кандидат ещё не держал в голове lifecycle Angular.
Constructor — создание и DI; ngOnInit — старт после готовности inputs. Знайте оба стиля: классический OnInit и современный signal/effect.
