我遇到了错误
question-images.service.ts(5,2): Error during template compile of 'QuestionImagesService' Only initialized variables and constants can be referenced in decorators because the value of this variable is needed by the template compiler in 'Injectable' 'Injectable' references 'Injectable' 'Injectable' references 'Injectable' 'Injectable' is not initialized at ..\@angular\core\src\di\metadata.ts(138,22)
这是组件
import { Component, OnChanges, OnInit } from '@angular/core';
import { SafeHtml } from '@angular/platform-browser';
import { QuestionImagesService } from '@app/patient/components/assesment/questions/question-images.service';
import { QuestionBase } from '@app/patient/components/assesment/questions/question.base';
@Component({
selector: 'ez-slider-question',
templateUrl: './slider-question.component.html',
styleUrls: ['./slider-question.component.scss'],
providers: [QuestionImagesService]
})
export class SliderQuestionComponent extends QuestionBase implements OnInit, OnChanges {
minValue: number;
maxValue: number;
value: number;
smallStep: number;
imageId = 0;
images: { [key: number]: SafeHtml } = {};
constructor(private questionImagesService: QuestionImagesService) { super(); }
ngOnInit() {
this.minValue = 1;
this.smallStep = 1;
this.maxValue = this.question.answers.length;
this.value = this.question.userAnswers[0]
? Number(this.question.answers.find(answer => answer.id === this.question.userAnswers[0].id).value)
: this.minValue;
this.images = this.questionImagesService.startLoadingImages(this.question);
}
getNewUserAnswerValues(): string[] {
return [this.value.toString()];
}
onValueChange(value: number) {
this.imageId = this.question.answers.find(answer => answer.value === value.toString()).id;
}
这是服务
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core/src/core';
import { SafeHtml, DomSanitizer } from '@angular/platform-browser';
@Injectable()
export class QuestionImagesService {
private images: { [key: number]: SafeHtml } = {};
constructor(private httpClient: HttpClient, private domSanitizer: DomSanitizer) { }
startLoadingImages(question: IQuestion): { [key: number]: SafeHtml } {
this.images = {};
question.answers.forEach(answer => {
if (answer.imageUrl) {
this.httpClient.get(`http://localhost:54531/${answer.imageUrl}`, { responseType: 'text' })
.subscribe(imageHtml => this.images[answer.id] = this.domSanitizer.bypassSecurityTrustHtml(imageHtml));
}
});
return this.images;
}
}
执行ngserve --aot
期间抛出错误。我尝试过谷歌和使用服务工厂,但没有成功。我想以这种方式提供服务,因为我希望每个组件都有一个它的实例。您知道如何实现这一目标吗?
最佳答案
问题是您从 QuestionImagesService
内的错误路径导入 Injectable
。将导入更改为:
import { Injectable } from '@angular/core';
关于singleton - 如何使用 aot 在 Angular 5 的组件内部提供服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51742576/