具有相关服务的延迟加载功能模块

Lazy loading feature module with relate services

我有一个非常非常大的应用程序,其中包含 50 多个延迟加载的模块。问题是 @Injectable({ providedIn: 'root'}) 会将我所有的服务注入到根模块中(我想,如果我错了请纠正我)。 如何延迟加载它们?或者因为服务是简单的功能,它没有性能副作用吗?

只是不要传递给装饰器 { providedIn: 'root'}

改为使用 @Injectable() 来提供此服务。 并将服务导入必要的 lazy-module 并将其添加到 providers 部分。

The problem is that @Injectable({ providedIn: 'root'}) will inject all my services in the root module(I guess, correct me if I am wrong).

是的,它在用于 bootstrap 应用程序的模块中提供。文件的物理位置无关紧要。

How to lazy-load them?

停止在 root 中提供它们。

doesn't it have performance side effects?

与性能无关

当它需要在根目录中时将它放在 root 中,因为它是一个全局服务。当它的范围只是那个模块并且它是导入的子模块时,将它放在一个模块中。

如果您不明白为什么它应该或不应该在那里,请将它留在 root 中。

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

如果您希望在功能模块的所有/大部分组件中使用您的服务,那么您需要在功能模块的提供程序下使用该服务。 这样做的好处是,同一个服务实例可用于该功能模块中的所有组件。

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

如果您想使用特定于功能模块中少数组件的服务,请在组件级别注入您的提供商配置。

@Injectable({ providedIn: 'root'})

通过在组件级别使用上述元数据,它允许 Angular 通过从编译的应用程序中删除未在特定组件中使用的服务来优化应用程序。