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

问题描述:

所以我有一个Principal类,我想使用providers使它可用于DI。这个主要类别具有典型的API(isInRole,identity等)。这个类的构造函数需要用户名,编号,角色等。如何创建服务所需的数据时使用DI需要ajax调用

我想实现的是通过DI使其可用。对于@Component和其他@Injectable服务...但是,为了创建此类的单个实例,我需要调用REST API并获取有关当前用户的信息(它会返回id,角色和一些其他信息) ,所以关于实例的信息在AJAX通话结束之前是未知的。

首先,我想使用providersuseFactory,但....我不知道该怎么做。工厂功能将需要返回一个承诺/可观察和DI我想要使用private principal: Principal ...

任何提示我怎么能达到我想要的?

+0

请提供您的案件的详细信息。请参阅http://*.com/help/mcve。考虑到你是从后端获取信息在石头上不刻和应用程序生命周期过程中可能会改变,但最有可能的应该是路由解析,而不是作为APP_INITIALIZER现有的应答建议。 – estus

在应用程序启动前执行AJAX请求(或使用Principal类实例化的组件)。如果有机会,AJAX呼叫可能会返回类似not authorized的响应 - 在内部也应该正确处理Principal\PrincipalService

你可以做“的应用程序初始化”右主营AppComponent(您提供给您的主AppModule.bootstrap()功能),但可能是棘手的,特别是如果你使用Principal得很早。

“正确”的方式,通过APP_INITIALIZER做到这一点...有多个例子,所以我不想复制/粘贴这些。例如:https://github.com/angular/angular/issues/9047

请注意,APP_INITIALIZERMUST回报Promise,不Observable