ExpressionChangedAfterItHasBeenCheckedError-由具有* ngFor参数返回数组的函数引起

时间:2018-10-17 02:51:59

标签: angular typescript

表中的每一行都有一个itemId。我自定义了一个列,使其具有以下内容...

<td>
...
<div *ngFor="let hour of calculateHours(itemId)">
<div class="amount" [ngStyle]="{'height': '5px', 'width': getWidth(hour)}"></div>
</div>
...
</td>

我的问题是,当我向hours添加更多Item时,表中的数据不会刷新。

我知道绑定到模板中的方法很不好,并且每次更改检测都会调用该方法,但是我想不出一种好方法来获取初始显示的数据并在{{1}时刷新数据}更改。我唯一可以得到小时的地方是每行都有hours的地方。

所以我想itemId可以很好地工作,但是我需要我的*ngFor="let hour of calculatedHours"来计算...

有什么建议吗?谢谢!

1 个答案:

答案 0 :(得分:0)

与其直接在页面上调用函数calculateHours,还不如直接调用它。最好让您的代码返回Observable类型的小时数。您可以订阅代码,或者如果可能的话,最好使用异步管道。

如果您能够将CalculateHours作为小时数返回。即输入observable,您可以按以下方式实现它...

<div *ngFor="let hour of hours | async">
<div class="amount" [ngStyle]="{'height': '5px', 'width': hour}"></div>
</div>

对小时的任何更改都将反映在页面上。