Модуль отложенной загрузки с соответствующими службами - PullRequest
0 голосов
/ 14 июня 2019

У меня очень очень большое приложение с более чем 50 загруженными модулями. Проблема в том, что @Injectable({ providedIn: 'root'}) внедрит все мои сервисы в корневой модуль (наверное, поправьте меня, если я ошибаюсь). Как их лениво загрузить? или поскольку сервисы являются простыми функциями, разве у них нет побочных эффектов производительности?

Ответы [ 3 ]

1 голос
/ 14 июня 2019

Проблема заключается в том, что @Injectable ({условииIn: 'root'}) внедрит все мои службы в корневом модуле (я думаю, исправьте меня, если я ошибаюсь).

Да, он предоставляется в модуле, который использовался для начальной загрузки приложения.Неважно, где файл физически расположен.

Как их лениво загрузить?

Прекратить предоставлять их в root.

разве это не имеет побочных эффектов производительности?

Это не имеет ничего общегос производительностью.

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

Оставьте его в root, если вы не понимаете, почему он должен или не должен быть там.

https://medium.com/@tomastrajan/total-guide-to-angular-6-dependency-injection-providedin-vs-providers-85b7a347b59f

0 голосов
/ 14 июня 2019

Если вы хотите, чтобы ваша служба использовалась во всех / большинстве ваших компонентов в функциональном модуле, вам необходимо использовать эту службу у поставщиков функциональных модулей. Преимущество в том, что один и тот же экземпляр службы доступен для всех ваших компонентов в этом функциональном модуле.

@NgModule({
providers: [yourService ]  
})  
export class featureModule {}

Если вы хотите использовать свой сервис для нескольких компонентов вашего функционального модуля, введите конфигурацию вашего провайдера на уровне компонентов.

@Injectable({ providedIn: 'root'})

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

0 голосов
/ 14 июня 2019

просто не передавайте декоратору { providedIn: 'root'}.

Вместо этого используйте @Injectable() для этой услуги.И импортируйте сервис в нужный lazy-модуль и добавьте его в раздел providers.

...