我有一个包含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 4中使用APP_INITIALIZER标记的精彩教程设法解决了我自己的问题:[https://juristr.com/blog/2018/01/ng-app-runtime-config/#runtime-configuration]