我有一个Angular应用程序,在我的模块中我注入了两个单例服务,如下所示:
@NgModule({
imports: [],
exports : [],
declarations: [ MyComponent ],
providers: [ ImageService, DashboardService ]
})
在这两个服务中,我都定义了构造函数。但只有第一个构造函数中编写的代码才会在登录时执行。但是第二个构造函数中编写的代码没有被执行。
但是如果我刷新页面,则会调用两个构造函数。不知道为什么会这样。任何帮助表示赞赏。
答案 0 :(得分:0)
服务实例是在需要时创建的(出于性能目的)。当Component(或其他服务)需要Service时,angular会遍历Dependency Injection树,以查找定义(以及服务的实例)。
最有可能的是,正在执行的构造函数是组件所需的服务,而组件不需要未执行的服务。
我们来看以下例子
案例1
@Component({...})
export class MyComponent {
constructor(private imageService:ImageService) {}
}
以上将只创建一个ImageService实例。
案例2
@Component({...})
export class MyComponent {
constructor(private dashboardService:DashboardService) {}
}
这将仅创建DashboardService的实例。
案例3
@Component({...})
export class MyComponent {
constructor(private imageService:ImageService, private dashboardService:DashboardService) {}
}
这将创建ImageService和DashboardService的实例。
您可以在依赖注入部分更详细地了解Angular站点上的依赖项注入,更具体地说,Angular Dependency Injection和Hierarchical Injectors。