Проверяет понимание области видимости и жизненного цикла сервисов в Angular при использовании providedIn: 'root' и providers компонента.
Angular использует систему Dependency Injection (DI) для управления зависимостями. Сервисы — это классы, которые инкапсулируют логику и данные. Способ регистрации сервиса определяет, где он будет доступен и сколько экземпляров будет создано.
Когда вы указываете providedIn: 'root' в декораторе @Injectable, сервис регистрируется в корневом инжекторе приложения. Это означает, что во всем приложении будет существовать один единственный экземпляр этого сервиса (синглтон). Такой подход является рекомендуемым по умолчанию, так как он позволяет Angular выполнять tree-shaking: если сервис нигде не используется, он будет исключен из итогового бандла.
@Injectable({ providedIn: 'root' })
export class UserService {
private user: string;
setUser(name: string) { this.user = name; }
getUser() { return this.user; }
}Если вы добавляете сервис в массив providers конкретного компонента, Angular создает новый экземпляр сервиса для каждого экземпляра этого компонента. Этот экземпляр доступен только самому компоненту и его дочерним элементам (если они не имеют собственной регистрации). Это полезно, когда нужно изолировать состояние между разными частями приложения.
@Component({
selector: 'app-profile',
providers: [UserService]
})
export class ProfileComponent {
constructor(private userService: UserService) {}
}providedIn: 'root' — глобально, providers — локально для компонента.Используйте providedIn: 'root' для сервисов, которые должны быть общими (например, API-клиенты, хранилища состояния). Применяйте providers в компоненте, когда нужна изоляция данных или специфичная логика для конкретного компонента и его поддерева.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию