Sobes.tech
Middle
25

Что делает providedIn: 'root' в Angular и чем отличается от указания зависимости в providers компонента?

Companies where asked
Элара

Answer from AI

sobes.tech AI

providedIn: 'root' в Angular означает, что сервис будет зарегистрирован в корневом инжекторе приложения и будет синглтоном на уровне всего приложения. Это позволяет Angular автоматически создавать и предоставлять сервис без необходимости явно указывать его в массиве providers какого-либо модуля или компонента.

Отличия от указания зависимости в providers компонента:

  • Область видимости:

    • providedIn: 'root' — сервис доступен во всём приложении как один экземпляр.
    • providers компонента — сервис создаётся заново для каждого экземпляра компонента, то есть область видимости ограничена компонентом и его потомками.
  • Оптимизация:

    • При использовании providedIn: 'root' Angular может оптимизировать сборку, исключая сервисы, которые не используются.
  • Удобство:

    • providedIn: 'root' упрощает регистрацию сервисов, не нужно вручную добавлять их в providers.

Пример:

@Injectable({ providedIn: 'root' })
export class ApiService { }

@Component({
  selector: 'app-example',
  templateUrl: './example.component.html',
  providers: [LocalService] // новый экземпляр для каждого компонента
})
export class ExampleComponent { }

Таким образом, providedIn: 'root' подходит для сервисов с глобальной областью видимости, а providers компонента — для сервисов с локальной областью, специфичных для компонента.