angular - 注入服务的构造函数何时运行?
问题描述
在 Angular 7 中,如果我们有一个声明为 @Injectable({providedIn: 'root'}) 的服务,它的构造函数什么时候执行?它是在构建使用它的组件(作为依赖项)时执行,还是等到该服务中的方法第一次被调用?
注意:由于服务是单例的,所以我使用服务的构造函数来初始化一些值。我可以创建一个“Initialize()”方法并在组件的构造函数中调用它,但我发现这种方法有点混乱。
解决方案
用装饰器装饰的类的构造函数在Injectable
某个范围的注入器初始化该类/服务时被调用。您不能在一个范围内拥有同一服务的多个实例,除非您通过通过{ provide: MyService, useClass: MyService, multi: true }
.
该provideIn
选项定义了服务所属的范围,因此 usingprovideIn: 'root'
告诉 DI 使用 RootInjector 注入服务。而且由于服务不会在一个范围内多次初始化,因此该服务的构造函数只被调用一次,当 DI 需要第一次将该服务注入另一个组件/服务/模块时。
推荐阅读
- c++ - 使用 C++ 共享项目项目时,Visual Studio 2019 跨平台调试在远程系统上不起作用
- javascript - 与字符串连接时渲染对象数组
- flutter - Flutter,更新 Bloc 内有状态小部件列表的状态
- javascript - 作为 JavaScript 变量的 HTML 输入
- c# - 如何在 WPF 中创建忽略鼠标事件的覆盖弹出窗口?
- python - 如何在python中拟合任何非线性函数?
- python - 在交互式会话中查看熊猫数据框会引发 SettingWithCopyWarning
- joomla - 如何在 Joomla TinyMCE 中添加类以包含 p 标签
- angular - 从 npm 添加 argon2 或 bcrypt 后,Angular 构建失败
- bash - 使用 atom 为 aws 编写脚本