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

时间:2018-03-01 16:52:22

标签: angular typescript service httpclient asynchronous

我有一个包含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。

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

谢谢,

马克

1 个答案:

答案 0 :(得分:0)

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