angular - Angular 中注入(inject)服务的构造函数何时运行?

标签 angular typescript angular7

在 Angular 7 中,如果我们有一个声明为 @Injectable({providedIn: 'root'}) 的服务,那么它的构造函数何时执行?它是在构建使用它的组件(作为依赖项)时执行,还是等到首次调用该服务中的方法?

注意: 由于该服务是单例,因此我使用服务的构造函数来初始化一些值。我可以创建一个“Initialize()”方法并在组件的构造函数中调用它,但我发现这种方法有点困惑。

最佳答案

Injectable 装饰器装饰的类的构造函数在某个范围的注入(inject)器初始化该类/服务时被调用。您不能在一个范围内拥有同一服务的多个实例,除非您通过 { Provide: MyService, useClass: MyService, multi: true } 提供服务来强制它。

provideIn 选项定义服务所属的范围,因此使用 provideIn: 'root' 告诉 DI 使用 RootInjector 注入(inject)服务。由于服务不会在一个范围内多次初始化,因此当 DI 第一次需要将该服务注入(inject)另一个组件/服务/模块时,该服务的构造函数仅被调用一次。

关于angular - Angular 中注入(inject)服务的构造函数何时运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53444650/

相关文章:

javascript - 如何在 TypeScript 中按泛型类型过滤类型列表?

javascript - 如何使用 JavaScript 文件及其测试用例自动生成 TypeScript 文件?

typescript - 如何在 Typescript 中使用 Promise.all()

angular7 - 有人将 videojs-record 与 Angular 7 集成吗?

angular - 类型 'Observable<Object>' 不可分配给类型 'Observable<boolean>'

javascript - 向 Kendo UI 上下文菜单项添加其他数据

angular - 尝试在 Angular 中区分 '[object Object]' 时出错

angular - 在 kendo-daterange 上设置日期范围限制

Angular4 和 TypeScript 编译报错 TS2453

Angular 7 + ngx-bootstrap 3.1.3