Проверяет понимание современного подхода к внедрению зависимостей в Angular через функцию inject() и его отличий от классического внедрения через конструктор.
Внедрение зависимостей через конструктор — классический способ в Angular: зависимости перечисляются как параметры, а Angular подставляет их при создании класса. Функция inject() решает ту же задачу, но иначе: она читает текущий injection context и возвращает нужный токен. Это даёт больше гибкости в том, где и как получать зависимости.
providedIn: 'root' сервисах.// Классический подход через конструктор
@Component({ /* ... */ })
export class UserComponent {
constructor(private http: HttpClient, private router: Router) {}
}
// Подход через inject()
@Component({ /* ... */ })
export class UserComponent {
private http = inject(HttpClient);
private router = inject(Router);
}
Функция раскрывается в фабриках и хелперах. Например, можно написать функцию, которая сама достаёт сервис логирования, и использовать её в разных местах без прокидывания зависимости через параметры.
export function logAction(message: string) {
const logger = inject(LoggerService);
logger.log(message);
}
// Внутри injection context
@Component({ /* ... */ })
export class AppComponent {
constructor() {
logAction('App initialized');
}
}
inject() нельзя вызывать где угодно: он работает только в injection context — при создании класса, в фабрике провайдера или в функции, вызванной синхронно в этом контексте. В асинхронных колбэках, таймерах или обработчиках событий он выбросит ошибку, если контекст уже потерян.
Итог: inject() стоит применять для сокращения шаблонного кода, в фабриках и переиспользуемых функциях, а также при наследовании. Конструктор остаётся удобным и явным вариантом, особенно когда важна читаемость списка зависимостей класса.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию