我有一个由服务实例化的类(但不是服务本身)并且需要多个服务才能工作。 如果我在构造函数之外声明我需要的每个服务,我会收到一个错误,告诉我我的服务是未定义的。
我如何称呼它:
export class MapContentService {
public accidentMap: AccidentMapContent;
...
constructor(private httpRequestService: HttpRequestService, private translate: TranslateService, private conf: ConfigurationService) { }
...
public getMapContent(): Promise<MapContentInterface> {
...
this.accidentMap = new AccidentMapContent(this.httpRequestService, this.translate, this.conf);
}
它是如何工作的:
export class AccidentMapContent implements MapContentInterface {
...
private conf: ConfigurationService;
private translate: TranslateService;
private httpRequestService: HttpRequestService;
...
constructor( httpRequestService: HttpRequestService, translate: TranslateService, conf: ConfigurationService) {
this.conf = conf;
this.translate = translate;
this.httpRequestService = httpRequestService;
}
工作原理:
export class AccidentMapContent implements MapContentInterface {
...
constructor(private httpRequestService: HttpRequestService, private translate: TranslateService, private conf: ConfigurationService) { }
如果我们遵循构造函数逻辑,通常都可以正常工作。我不明白为什么它被覆盖了。请参阅这篇文章:declare properties in constructor angular 2这两种方法没有区别。
有人可以解释一下这是什么原因吗?
谢谢。
答案 0 :(得分:0)
我终于找到了发生的事情。 感谢@JB Nizet的评论,我做了进一步的调查。其中一个变量是使用其中一个服务启动的。
当我在构造函数参数中声明服务时,服务将可用于初始化变量,否则,当我在构造函数中声明服务时,变量初始化将在服务初始化导致崩溃之前发生:
export class AccidentMapContent implements MapContentInterface {
...
// The faulty line :
private icon: MapPointIcon = new MapPointIcon(this.conf.mapConf.ICON_SIZE, this.conf.mapConf.ICON_OFFSET, this.conf.mapConf.ICON_URL);
...
constructor(private httpRequestService: HttpRequestService, private translate: TranslateService, private conf: ConfigurationService) { }
解决方案:我也将变量初始化移动到构造函数。