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

时间:2019-06-14 16:49:49

标签: angular import lazy-loading

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

3 个答案:

答案 0 :(得分:1)

  

问题在于@Injectable({provedIn:'root'})会将我所有的服务注入到根模块中(我想,如果我错了,请纠正我)。

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

  

如何延迟加载它们?

停止在root中提供它们。

  

它不会产生性能副作用吗?

它与性能无关。

当它需要放在根目录中时,将其放在root中,因为它是全局服务。当它的作用域仅是该模块且是导入的子级时,将其放在模块中。

如果您不知道为什么应该把它留在root中。

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

答案 1 :(得分:0)

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

为此服务请使用@Injectable()。 并将服务导入必要的惰性模块,并将其添加到providers部分。

答案 2 :(得分:0)

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

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

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

@Injectable({ providedIn: 'root'})

通过在组件级别使用上述元数据,如果特定组件中未使用该服务,则Angular可以通过从已编译应用中删除该服务来优化应用。