如何在创建服务所需的数据时使用DI需要ajax调用

时间:2017-05-29 18:44:19

标签: angular

所以我有一个Principal课程,我想使用providers将其提供给DI。此主要类具有典型的API(isInRoleidentity等)。该类的构造函数采用username,id,roles等。

我想要实现的是通过DI提供它,例如对于@Component和其他@Injectable服务...但是,为了创建此类的单个实例,我需要调用REST API并获取有关当前用户的信息(它返回id,roles和一些附加信息),因此在AJAX调用结束之前,不知道有关实例的信息。

首先,我考虑将providersuseFactory一起使用,但是......我不知道该怎么做。工厂函数需要返回promise / observable,对于DI我想使用private principal: Principal ...

任何提示如何实现我的目标?

1 个答案:

答案 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