Angular中没有模块级作用域这个概念,只有应用程序作用域和组件级作用域,这种设计主要考虑模块的扩展性,一个应用程序通常由多个模块合并而成,在@NgModule里注册的服务就可在整个应用程序内使用。
模块级作用域的一个特例:延迟加载。延迟加载使得应用程序在启动时不被载入,而是结合路由配置,在需要时才动态加载相应模块。Angular会对延迟加载模块初始化一个新的执行上下文,并创建一个新的注入器,在该注入器注入的依赖只在该模块内部可见。
如何避免多模块的相同标识污染。建议在根模块中集中管理其他模块的导入,通过providers元数据完成配置。另外,可以利用模块延迟加载的特性,在延迟模块中注入依赖,或者在模块的根组件中注入。
如何选择服务在模块中注入还是在根组件中注入。主要取决于该服务的应用场景,在模块中注入的服务的作用域是应用程序级的,像日志等工具类服务可能会在多个模块中调用,更适合在模块中注入;而与业务场景相关的服务,可在相关模块的根组件中注入。由于存在延迟加载模块调用不到组件级作用域里服务的情况,如果一个服务需要被延迟加载的模块调用,也应该在根模块中注入。如果不确定一个服务将来是否会被外部模块调用,可优先考虑在模块中注册。
Angular延迟加载
最新推荐文章于 2024-10-21 08:23:06 发布