所以我有一个Principal
课程,我想使用providers
将其提供给DI。此主要类具有典型的API(isInRole
,identity
等)。该类的构造函数采用username,id,roles等。
我想要实现的是通过DI提供它,例如对于@Component
和其他@Injectable
服务...但是,为了创建此类的单个实例,我需要调用REST API并获取有关当前用户的信息(它返回id,roles和一些附加信息),因此在AJAX调用结束之前,不知道有关实例的信息。
首先,我考虑将providers
与useFactory
一起使用,但是......我不知道该怎么做。工厂函数需要返回promise / observable,对于DI我想使用private principal: Principal
...
任何提示如何实现我的目标?
答案 0 :(得分:0)
在app启动之前执行AJAX请求(或者实例化使用Principal
类的组件)。如果Principal
AJAX调用有可能返回not authorized
响应之类的内容,那么内部Principal\PrincipalService
也应该正确处理。
您可以执行" app初始化"从主AppComponent
(您提供给主.bootstrap()
的{{1}}函数)开始,但这可能很棘手,尤其是如果您很早就使用AppModule
。
"右"通过Principal
来做到这一点的方法......有很多关于SO的例子,所以我不想复制/粘贴那些。例如:https://github.com/angular/angular/issues/9047
请注意,APP_INITIALIZER
必须返回APP_INITIALIZER
,而不是Promise
。