【发布时间】:2019-10-01 06:09:01
【问题描述】:
ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'ngIf: false'. Current value: 'ngIf: true'.
我在控制台中收到上述“警告”。我有一堆过滤器可以隐藏/显示 ngFor 循环中的项目。当过滤器没有匹配时,例如没有 ngFor 孩子们 我提示 ngIf 显示一条优雅的消息。
这就是我的做法......
Component.ts
<!-- Returned contact logs -->
<ul #personTimeline>
<my-timeline-entry
*ngFor="let entry of contactLog | filter:filteredContactReason:'contactReason'"
logEntryDateTime={{entry.dateTime}} logEntryNotes={{entry.notes}}>
</my-timeline-entry>
</ul>
<!-- No results returned -->
<div *ngIf="!personTimeline.children.length">
<div class="alert alert-warning" role="alert">
<strong>{{startDate}} Sorry!{{' '}}</strong>No contact log matches found.
</div>
</div>
通过使用#personTimeline,我检查了它的children.length。当为“0”时,它显示我的无结果 div。
我已经更改了一些内容,并重构了一些代码,现在该消息仅在我“在”第一次看到应该看到无结果 div 的空白区域之后进行交互时出现。一旦我单击一个元素,就会出现无结果消息。
我知道我可能需要介绍ngOnChanges?因为这是一个生命周期问题,但不确定如何定位我的 #personTimeline 句柄,还是我需要通过该句柄以某种方式触发 *ngIf="!personTimeline.children.length"?
或者有没有更好的方法来实现不显示结果?
一如既往地感谢任何帮助或建议。
【问题讨论】:
-
我看到了一些关于 markForCheck 的想法,想知道这里是否可以选择?
-
在 ts 文件中使用 markForCheck 非常棒。如果你在 html 中做这一切,它也不会工作。如果您注释掉您的无结果 div,您的错误会消失吗?通常这种类型的错误与角度检测所有变化时信息的变化有关。
-
是的,如果我注释掉 no-results div,错误就会消失
标签: javascript angular typescript