#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 для совместного использования одного и того же экземпляра во всем приложении, выполнив одну из двух возможностей:
-
добавьте его в массив providers в вашем корневом модуле (модуль приложения)
-
создайте службу, предоставляемую в root
@Injectable({ providedIn: ‘root’ })
но лучше всего использовать @Injectable() декоратор самого сервиса, чтобы сделать его древовидным.
если теперь вы можете предоставить услугу на уровне своих лениво загруженных модулей, чтобы у службы был новый экземпляр для каждого модуля
или предоставьте услугу в компонентном рычаге, чтобы ваш компонент и его дочерние элементы имели один и тот же экземпляр
@Component({
selector: 'parent',
template: `...`,
providers: [ YourService ]
})