Angular 2 - 确保在创建其他API之前进行了一次API调用

时间:2016-04-18 18:51:31

标签: angular

在我网站的每个页面上,一旦用户登录,我就会获得用户数据。

这个单一的API调用是我应用中最重要的一个。

我从这个API调用获得的信息在我的应用程序中的许多组件中使用,我需要确保我的模板“等待”进行此API调用,然后再继续显示我的申请数据。

此API调用在服务构造函数中定义,这就是我的服务中此方法的样子:

public userData;
...
    getUserData()
        {
        if (this.getToken()) {
        console.log("Getting user..");
        this.http.get('thisUser?token='+this.getToken())
          .map((res:Response) => res.json())
          .subscribe(
            data => {
                this.userData = data.user;
            },
            err => { this.checkToken(err); }
          );
        }

这意味着我的JwtService.userData变量必须在显示我的模板之前获取信息(我在我的组件中使用了*ngIf="JwtService.userData)。

我如何确保首先获得这些数据?

2 个答案:

答案 0 :(得分:1)

这取决于您的应用程序的架构。

您可以使用Analytics.Management.Uploads.uploadData(accountId, webPropertyId, customDataSourceId, mediaData);等模板轻松创建应用程序。实施生命周期监听器<div #child><div/>并在OnInit方法中执行您想要的任何检查,然后使用ngOnInit加载主要组件:DynamicComponentLoader

答案 1 :(得分:1)

这个问题很有意思。

我不知道我的解决方案是否能够正常运行,因为我正在使用智能手机进行编写而无法测试我的代码。

您可能正在使用路由器,因此您所处的位置为<router-output>

你可以尝试写这样的东西:

<div ngIf="(callDone | async)">
 <router-output></router-output>
</div>

其中callDoneObservable,在API调用之前设置为false,并在回调中设置为true。

另一种可能性是将所有组件链接到Observable callDone。角度变化检测器应该完成所有工作