在 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/