我的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();
}
答案 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是为此设计的。