当我尝试从另一个服务函数调用的subscribe()方法中调用服务函数时,我收到一个奇怪的错误。 TypeError声明:
TypeError: _this.fileloaderService.downloadFile is not a function
我有两个服务,一个用于获取一些剧集,另一个用于加载文件的内容。我导入它们并将它们包含在我的EpisodesComponent构造函数中,如下所示:
import { EpisodeService } from '../episode.service';
import { FileloaderService } from '../fileloader.service';
constructor(private episodeService: EpisodeService,
private fileloaderService: FileloaderService) { }
然后我收到我的剧集,当它们被退回时,我尝试从我的剧集对象中的一个字段加载一个文件:
getEpisodes(): void {
this.episodeService.getEpisodes().subscribe(episodes => {
this.episodes = episodes;
for (let i of this.episodes) {
this.fileloaderService.downloadFile(i.fileUrl).subscribe(file => {
i['file'] = file;
});
}
});
}
但是,在控制台运行时,它会抱怨downloadFile()方法不存在。但是它正确编译,你可以看到它确实存在 在下面的服务中。
@Injectable()
export class FileloaderService {
constructor(private http: HttpClient) { }
downloadFile(fileUrl): Observable<Text> {
let options = new RequestOptions({responseType: ResponseContentType.Text});
return this.http.get(fileUrl, options)
.catch(this.handleError('downloadFile'));
}
似乎抱怨它不存在/没有实例化或者某种东西,但我创建和包含这两种服务的方式是相同的。
有什么想法吗? (我对Typescript来说是全新的,所以请放轻松我!)提前感谢...
编辑1 :我使用ng serve --open运行此操作 我已经包括:
console.log("fileloaderService:" + JSON.stringify(this.fileloaderService));
在getEpisodes()。subscribe()函数内部输出:
fileloaderService: {}
编辑2 :我还将服务添加到app.module.ts提供商,如下所示:
providers: [EpisodeService, FileloaderService],
编辑3 :我已经在这里简化了应用程序的stackblitz:
https://stackblitz.com/edit/angular-sazw43
不幸的是,我现在正努力让内存中的web-api内容正常工作,但你应该能够看到我所拥有的一切(我认为)
答案 0 :(得分:0)
getEpisodes(): void {
this.episodeService.getEpisodes().subscribe(episodes => {
this.episodes = episodes;
var self = this;
for (let i of this.episodes) {
self.fileloaderService.downloadFile(i.fileUrl).subscribe(file => {
i['file'] = file;
});
}
});
}
答案 1 :(得分:0)
这似乎是由于downloadFile()方法中的http.get()没有正确格式化引起的,除了我试图使用的RequestOptions对象之外没有。
这是因为我认为使用已弃用的@ angular / http库和更新的@ angular / common / http
对不起浪费每个人的时间