Angular 2:更智能地使用http observables

时间:2016-08-31 07:46:40

标签: angular

我有全球服务。在这项全球服务中,我正在进行重要的API调用以获取用户数据。此用户数据API调用对我网站中的许多页面很重要,因此需要首先执行。我以这种方式将此API调用放在我的服务构造函数中:

constructor(public router: Router,private http: Http) {
        if (this.getToken())
        this.getUserData().subscribe(() =>{});
    else
        this.LOADED = true;
    }

工作正常。

现在让我们谈谈一个组件。我有一个名为WorldComponent的组件,它使用从服务构造函数中执行的this.getUserData()方法收到的信息,如上所示。

当我尝试使用从服务API调用中收到的数据时,我收到一条错误消息,指出此数据不存在(因为我打电话时API调用还没有完成这个组件)。因此我在我的组件OnInit()方法中放置了以下代码:

ngOnInit()
   {
       this.service.getUserData().subscribe(() => {    
            if (this.service.userData.fly)
                this.router.navigate(['fly']);
            if (this.service.userData.ride)
                this.router.navigate(['ride']);

            this.loaded = true;
        });
   }

使用上面的海湾时,我的组件效果很好,但如果您注意到 - API调用将执行**两次!*。

在使用此组件之前,有没有办法等待加载API调用,甚至更好,我应用中的任何组件?

Befoer RC.5我可以*ngIf路由器插座和路由器仅在收到数据时工作。现在我不能将* ngIf放在路由器插座外面,我需要找到另一种解决方案。

0 个答案:

没有答案