Зарегистрируйте службу в корневом AppModule или корневом AppComponent.

Везде рекомендуется регистрировать сервис в корневом массиве провайдеров AppModule и избегать использования массива провайдеров корневого AppComponent. Когда кто-то должен зарегистрировать службу в корневом AppComponent? Любой практический пример. В чем преимущество регистрации сервиса в корневом AppModule по сравнению с корневым AppComponent?


person Jyoti Prasad Pal    schedule 25.08.2017    source источник


Ответы (3)


При регистрации в корне предоставляемая служба создается как одноэлементная, в отличие от предоставления в компоненте, она будет создана столько экземпляров, сколько вы используете компонент.

Другими словами:
Служба, внедренная на корневом уровне, будет доступна во всем приложении.
Служба, предоставляемая на уровне компонента, будет доступна только для этого компонента и его дочерних элементов.

Если вы внедрите службу в несколько компонентов (@Component({ ...providers: [] ..}), каждый из них получит свой собственный экземпляр, а их дочерние элементы будут использовать один и тот же экземпляр.
Если вы внедрите его на корневом уровне (@NgModule({ ... providers: []}), все компоненты будут использовать один и тот же экземпляр.

Подробнее здесь

person Vega    schedule 25.08.2017
comment
Вы хотите сказать, что если вы зарегистрируете службу в корневом массиве поставщиков AppComponent, она не будет доступна для всего приложения? Если нет, то как это влияет на регистрацию в корневом AppModule? - person Jyoti Prasad Pal; 27.08.2017
comment
Да, я просто говорил об обратном: тот, который был введен на корневом уровне, будет доступен во всем приложении. - person Vega; 27.08.2017
comment
Теперь я смущен. Если я зарегистрирую службу в корневом AppComponent вместо корневого AppModule, будет ли она доступна для всего приложения или нет? Просьба уточнить. - person Jyoti Prasad Pal; 27.08.2017
comment
вопрос заключался в разнице между rootComponent и rootModule, а не между компонентом и модулем. - person Sukesh Marla; 28.05.2020
comment
@Suskesh, ОП принял, потому что это ответил на их вопрос. Если у вас есть новый вопрос, есть кнопка «Задать вопрос». - person Vega; 29.05.2020

Вы можете зарегистрировать сервис в app.module или в app.component. Разница в том, что когда вы регистрируете службу в app.module, ее можно внедрить как зависимость в любой компонент и службу, но при регистрации в app.component ее можно внедрить как зависимость только в компоненты.

person Shivang Gupta    schedule 27.07.2018

Вы не можете зарегистрировать службу в компоненте. Каждая служба должна быть зарегистрирована в модуле.

@NgModule({
   imports: [
       CommonModule,
       etc
   ],
   declarations: [
       AppComponent,
       Other components and stuff related to this module
   ],
   exports: [
       What you want to export if this module is imported by another
   ],
   providers: [
       YourService 
   ]

Например, я храню все свои сервисы в «CoreModule» и просто импортирую CoreModule в AppRoot.

Надеюсь помочь с этим ответом.

person Andrei Panturu    schedule 25.08.2017
comment
Мы можем зарегистрировать службу в массиве поставщиков компонента. Так что вы ошибаетесь. - person Jyoti Prasad Pal; 25.08.2017