Angular 5 - ограничить обслуживание модулем - PullRequest
0 голосов
/ 28 мая 2018

У меня есть два модуля - назовем их module-E и module-P.У меня есть один сервис в модуле-E, скажем, сервис-E, который имеет несколько методов.Я хочу использовать все функции service-E в module-P, за исключением нескольких функций, поэтому я расширил service-P из service-E и переопределил эти функции в service-P.

В module-E декларация провайдера

providers: [service-E]

В модуле-P декларация провайдера

providers: [{provide: service-E, useClass: servie-P}]

Проблема в том, что если я сначала загружаю модуль-P, я получаю service-P даже в модуле-E, и если я сначала загружаю модуль-E, то получаю service-E в module-P.

Я хочу ограничить service-P модулем-P и service-E модулем-E, несмотря ни на что.

Ответы [ 3 ]

0 голосов

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

Источник: https://medium.com/@michelestieven/organizing-angular-applications-f0510761d65a

0 голосов
/ 28 мая 2018

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

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

См.: https://angular.io/guide/dependency-injection#injectable-ngmodule-or-component

0 голосов
/ 28 мая 2018

Почему бы не использовать модули?

@NgModule({
  providers: [serviceE]
})
export class ServiceEModule {}

@NgModule({
  imports: [ServiceEModule],
})
export class PModule {}

Вам даже не нужно объявлять это дважды с помощью этой логики, вся ваша бизнес-логика централизована.

...