有以下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()
?
答案 0 :(得分:2)
引用this教程:
&#34; Angular 2服务只是一个javascript函数及其相关属性和方法,可以包含(通过依赖注入)到Angular 2组件中。它们允许您为可在这些组件中使用的特定任务开发代码。&#34;
它们在注入时不需要初始化(它是单独完成的),它们只有一个状态,只需要在给定的组件中注入。
这是一个更好的方法:
class RaceList {
races: Array<string>;
constructor(private raceService: RaceService) {
raceService.list()
.then(races => this.races = races);
}
}
正如您所看到的,您不需要将服务的值保存在类变量中,因为它设置为私有,可以通过调用{{1}在RaceList
中的任何方法中使用它。 }。
答案 1 :(得分:1)
这是打字稿的语法糖, 而不是:
private raceService: RaceService;
constructor() {
this.raceService = new RaceService;
}
你只需这样做:
constructor(private raceService: RaceService) {}
答案 2 :(得分:0)
通过引擎盖,Angular会进行初始化,并通过组件的构造函数为您提供初始化实例。
如果您的服务本身在其构造函数中需要其他服务,Angular会初始化其他服务,将它们提供给您的服务构造函数,然后将您的服务提供给您的组件。