Могу ли я использовать службу angular, не упоминая ее в поставщиках NgModule?

#javascript #angular #typescript

#javascript #angular #typescript

Вопрос:

Я новичок в Angular и следую руководствам freecodecamp на YouTube. Им 2 года.

В руководстве по службам упоминается, что нам нужно упомянуть службу в providers списке в корневом NgModule, чтобы она работала. Но я не упомянул об этом в providers .

Я заметил, что в руководстве нет providedIn в Injectable() . Но когда я создал новую службу в Angular 10, я получил ее по умолчанию в Injectable() . Пока служба работает без каких-либо проблем.

Являются ли эти 2 одинаковыми?

Можем ли мы упомянуть providedIn: 'root' и оставить его без упоминания в providers списке, чтобы он работал и наоборот?

Комментарии:

1. Прочитайте это: angular.io/guide/singleton-services

2. Спасибо @R.Richards . Это прояснило мой запрос.

Ответ №1:

Вы можете создать синглтон службы Angular для совместного использования одного и того же экземпляра во всем приложении, выполнив одну из двух возможностей:

  1. добавьте его в массив providers в вашем корневом модуле (модуль приложения)

  2. создайте службу, предоставляемую в root

    @Injectable({ providedIn: ‘root’ })

но лучше всего использовать @Injectable() декоратор самого сервиса, чтобы сделать его древовидным.

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

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

 @Component({
 selector: 'parent',
 template: `...`,
 providers: [ YourService ]
})