第二个服务的构造函数方法未被调用

时间:2018-02-12 12:23:24

标签: angular

我有一个Angular应用程序,在我的模块中我注入了两个单例服务,如下所示:

@NgModule({
    imports: [],
    exports : [],
    declarations: [ MyComponent ],
    providers: [ ImageService, DashboardService ]
})

在这两个服务中,我都定义了构造函数。但只有第一个构造函数中编写的代码才会在登录时执行。但是第二个构造函数中编写的代码没有被执行。

但是如果我刷新页面,则会调用两个构造函数。不知道为什么会这样。任何帮助表示赞赏。

1 个答案:

答案 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 InjectionHierarchical Injectors