我有一个非常大的应用程序,其中包含50多个延迟加载的模块。问题是@Injectable({ providedIn: 'root'})
会将我所有的服务注入到根模块中(我想,如果我错了,请纠正我)。
如何延迟加载它们?还是因为服务是简单的功能,它不会产生性能副作用吗?
答案 0 :(得分:1)
问题在于@Injectable({provedIn:'root'})会将我所有的服务注入到根模块中(我想,如果我错了,请纠正我)。
是的,它是用于 bootstrap 应用程序的模块中提供的。文件的物理位置无关紧要。
如何延迟加载它们?
停止在root
中提供它们。
它不会产生性能副作用吗?
它与性能无关。
当它需要放在根目录中时,将其放在root
中,因为它是全局服务。当它的作用域仅是该模块且是导入的子级时,将其放在模块中。
如果您不知道为什么应该把它留在root
中。
答案 1 :(得分:0)
只是不要传递给装饰器{ providedIn: 'root'}
。
为此服务请使用@Injectable()
。
并将服务导入必要的惰性模块,并将其添加到providers
部分。
答案 2 :(得分:0)
如果要在功能模块的所有/大部分组件中使用服务,则需要在功能模块的提供程序下使用该服务。 这样做的好处是,该功能模块中的所有组件都可以使用服务的同一实例。
@NgModule({
providers: [yourService ]
})
export class featureModule {}
如果您想使用特定于功能模块中几个组件的服务,请在组件级别注入您的提供程序配置。
@Injectable({ providedIn: 'root'})
通过在组件级别使用上述元数据,如果特定组件中未使用该服务,则Angular可以通过从已编译应用中删除该服务来优化应用。