1

我在使用异步管道时遇到问题,因为我想要一个能够同时依赖异步和静态数据的列表。但是,我无法理解如何以聪明的方式做到这一点。

现在它看起来像这样:

<ul>
  <li *ngIf="true" *ngFor="let item of list">{{item}}</li>
  <li *ngIf="false" *ngFor="let item of list | async">{{item}}</li>
</ul>

这是非常烦人的部分,即使*ngIf是错误的,异步管道仍然会尝试做它的事情。导致应用程序崩溃并抛出错误,指出异步管道的参数类型错误,因为它需要一个承诺而不是数组。

所以我的问题是,为什么它会这样做,以及实现我想要的更好和更正确的方法是什么?

4

1 回答 1

1

更改模型,以便即使您的数据是静态的,模板也会得到可观察的。这可以很容易地完成Observable.of()

例如,假设您通常从getData()函数中获取 observable,但是当数据是静态的时,您从getStaticData()函数中获取它。你会这样做:

模型

if(isDataStatic){
    //convert static data into an observable that emits that data
    this.list = Observable.of(this.getStaticData());
}else{
    //however you typically get the observable
    this.list = this.getData();
}

因此list,即使您的数据是静态的,它也始终是可观察的。模板可以保持简单。

模板

<ul>
  <li *ngFor="let item of list | async">{{item}}</li>
</ul>
于 2016-08-28T15:07:10.683 回答