有以下TypeScript类:
class RaceList {
raceService: RaceService;
races: Array<string>;
constructor(raceService: RaceService) {
// the interesting part is `: RaceService`
this.raceService = raceService;
this.raceService.list()
.then(races => this.races = races);
}
}
这种结构是如何工作的:this.raceService.list()
如果我没有像这样的类初始化:raceService = new RaceService()
?
引用本教程:
"Angular 2服务只是一个 javascript 函数,以及它相关的属性和方法,可以(通过依赖注入(包含在 Angular 2 组件中。它们允许您为可以在这些组件中使用的特定任务开发代码。
它们在注入时不需要初始化(它是自己完成的(,它们具有单一状态,只需要注入给定的组件。
这是一个更好的方法:
class RaceList {
races: Array<string>;
constructor(private raceService: RaceService) {
raceService.list()
.then(races => this.races = races);
}
}
如您所见,您不需要将服务的值保存在类变量中,因为它设置为私有,它可以通过调用this.raceService
在RaceList
中的任何方法中使用。
这是打字稿的语法糖, 而不是:
private raceService: RaceService;
constructor() {
this.raceService = new RaceService;
}
您只需这样做:
constructor(private raceService: RaceService) {}
在后台,Angular 进行初始化,并通过组件的构造函数为您提供初始化的实例。
如果您的服务本身在其构造函数中需要一些其他服务,Angular 会初始化这些其他服务,将它们提供给您的服务构造函数,然后将您的服务提供给您的组件。