不清楚为什么在角度“异步”管道中必须使用“ as”

时间:2019-12-28 18:26:34

标签: angular typescript asynchronous pipe

我的HTML中有以下标记。它可以按预期工作并按照预期运行。

<ng-container *ngIf="stuff$ | async as data">
  <div *ngFor="let element of data">{{element.name}}</div>
</ng-container>

我开始对其进行篡改,以了解我能制止/改善的情况,并假设 as数据仅为订阅的结果分配了一个变量名(由于 async < / em>管道),我希望我可以直接重用 data $ 而不用考虑额外的变量。所以我改成了这个。

<ng-container *ngIf="stuff$ | async">
  <div *ngFor="let element of stuff$">{{element.name}}</div>
</ng-container>

这很惨,失败了,并在下面产生了错误。

  

错误错误:找不到类型为“对象”的其他支持对象“ [对象对象]”。 NgFor仅支持绑定到数组等Iterable。

虽然我了解错误的含义,但看不到错误的出处。我订阅的服务返回一个可观察的数组。属性的 as 'ing是否为 async 强制性?我确信在异步管道上阅读时我会错过一个微妙的小东西,但是我看不到它。

stuff$: Observable<Thing[]>;
ngOnInit() { ...
  this.stuff$ = this.stuffy.getStuff();
}

2 个答案:

答案 0 :(得分:3)

很简单:table(stack(setNames(strsplit(as.character(df$x), ",\\s+"), seq_len(nrow(df))))[2:1]) 包含一个观察词。当您使用stuff$管道时,Angle会在幕后订阅可观察对象,并返回要在模板上使用的值。

使用async时,会将as data的结果保存到stuff$ | async变量中,使您可以使用它而无需多次使用data管道。

您的第二个代码失败,因为您不能遍历Observable,因为它是一个对象。

答案 1 :(得分:1)

您可以这样做:

<div *ngFor="let element of stuff$ | async">{{element.name}}</div>

ngFor是为此设计的。