Angular 2:延迟组件渲染,直到服务异步初始化

时间:2017-03-26 11:32:58

标签: angular

我有一个Angular 2应用程序,我希望尽可能保持精简(流量方面)并仅在需要时加载某些数据集(来自API URL)。

负责加载数据的服务作为依赖项传递给ui组件构造函数。组件模板有许多对服务属性和方法的引用。我可以在构造函数中启动数据加载,但由于加载是异步发生的,因此在数据到达时已经呈现了组件。

所以,基本上,我正在寻找一种方法来推迟组件呈现,直到使用从API加载的新数据初始化服务。目前我有一个基本路由,其中​​包含检查服务是否已初始化的组件,并在完成初始化后导航到最终路由。但这并不漂亮,因为一个视图需要两条路线。

1 个答案:

答案 0 :(得分:3)

你可以做这样的事情;

让我们假设您从异步调用中获取数据,如下所示:

this.myService.myAsyncCall().subscribe((res)=>{...})

在此异步调用中,可以说您正在将响应分配给组件的字段

this.myService.myAsyncCall().subscribe((res)=>{
    this.field = res.data.list;
})

并且您不希望在此数据到达之前呈现您的模板,因此您可以在模板中使用*ngIf

<div *ngIf="field && field.length && field.length > 0">
  ...
</div>

这只是一种方法。您可以使用安全导航操作符(?)进行较小的操作,但由于您未提供有关代码的任何信息,因此我给出了一般答案。