繁体   English   中英

访问 Angular 懒加载模块中的根服务

[英]Access root services in Angular lazy loaded module

我正在使用 Angular 延迟加载模块,并希望在延迟加载模块中访问根服务说AuthService 我想访问延迟加载模块中根注入器中存在的 singleton 实例。

我正在关注https://angular.io/guide/providers并且有两个语句导致混淆:

当您将服务提供者添加到根应用程序注入器时,它在整个应用程序中都可用。

当 Angular 路由器延迟加载模块时,它会创建一个新的注入器。 此注入器是根应用程序注入器的子代。 想象一棵注射器树; 每个延迟加载的模块都有一个根注入器,然后是一个子注入器。 路由器将根注入器中的所有提供程序添加到子注入器。 当路由器在延迟加载上下文中创建组件时,Angular 更喜欢从这些提供程序创建的服务实例,而不是应用程序根注入器的服务实例。

第一条语句清楚地表明我可以在应用程序的任何位置访问根服务。 而第二个是说延迟加载的模块将获得自己的注入器,并可能拥有自己的服务实例?

那么这是否有可能在延迟加载的模块中获取服务的 singleton 实例?

如果您在整个应用程序中只寻找一个实例,您可以指定

@Injectable({
   providedIn: 'root',
})

此行为也可以通过在 app 模块src/app/app.module.ts (providers) 中指定来覆盖

@Injectable()装饰器标识服务 class。 providedIn属性配置了一个特定的ModuleInjector ,这里是root ,这使得服务在root ModuleInjector中可用。

延迟加载其他@NgModules ModuleInjectors

参考链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM