访问方法时未初始化Angular 4 Service

问题描述 投票:0回答:1

我有一个包含I18n服务的Angular 4应用程序,它使用HttpClient在其构造函数中异步检索json文件。检索到json时,会将其分配给对象。

I18n服务公开getKeyValue()方法以从该对象检索值。我的一个组件在ngOnInit()中调用I18n服务getKeyValue('about-card-text')方法来检索特定文本。

但是这会引发错误:

Uncaught (in promise): TypeError: Cannot read property 'about-card-text' of undefined

Undefined是应该包含json的对象。

我希望该服务在调用getKeyValue()方法之前首先异步检索json文件,但实际发生的是服务方法已在服务完成初始化并加载json文件之前调用。

将组件中的调用更改为SetTimeOut(() => getKeyValue('about-card-text'), 100)

使它工作,但这是一个黑客。

我可以在Component中订阅HttpClient Observable,但我想防止外包逻辑到服务器初始化的调用组件。我只想在服务中保留关于I18n服务的所有逻辑,只需通过调用getKeyValue()让组件访问公共API。

这有可能,这里的解决方案是什么?

谢谢,

angular typescript service httpclient asynchronous
1个回答
0
投票

我通过这篇关于在Angular 4中使用APP_INITIALIZER标记的精彩教程设法解决了我自己的问题:[https://juristr.com/blog/2018/01/ng-app-runtime-config/#runtime-configuration]

© www.soinside.com 2019 - 2024. All rights reserved.