在一些Angular项目中我遇到了同样的问题,每当我尝试在HTML中调用一个函数(从api中检索一些值)时,它就会触发一个无限循环。在下面的示例中,它是触发循环的getUser()。
HTML
<ul>
<li *ngFor="let order of orders">
{{ getUser(order.orderNr).emailAddress }}
</li>
</ul>
成分</ P>
private getOrdersList() {
this.orderService.getAll().subscribe(
orders => {
this.orders = orders;
}
);
}
public getUser(orderNr: number) {
return this.orderService.getUser(orderNr);
}
服务
public getAll(): Observable<Order[]> {
return this.api.get<Order[]>('orders');
}
public getUser(orderNr: number) {
return this.api.get<void>('orders/'+orderNr);
}
我认为它与Angular处理数据的方式有关,但我对Angular很新,不确定如何在不引起循环的情况下检索这些数据。也许更有经验的人可以提供一些帮助?
答案 0 :(得分:2)
它不是一个无限循环,它只是Angulars变化检测。
在开发过程中,每次变化检测运行也都在第二轮之后。 任何异步调用完成时都会运行更改检测(事件处理程序,超时,...),因此可能经常发生。
通常应该避免绑定到视图中的函数,而是将结果分配给字段并改为绑定到该字段。 Angular非常有效地检查字段值是否已更改。