嗨,我在angular中得到这个错误“表达式在它被检查后被改变了”,但我的应用程序的行为是真的。第一个问题是,如果发生错误,为什么组件可以正常工作?
例如,我有两个兄弟组件,它们像这样使用它们:
<cmp-a (onSelectItem)="selectedItem = $event"></cmp-a>
<cmp-b [selectedItem]="selectedItem"></cmp-b>当cmp-a中的onSelectItem发出时,我将error.but selectedItem正确地传递给cmp-b,一切都很好,一切正常!
第二个问题是,如果真的发生了错误,为什么在prod模式下不通过angular框架显示此错误?
谢谢
发布于 2019-01-15 21:59:36
我希望这能帮到你。我不喜欢使用链接,因为它可能会在未来中断。因此,关于这种类型的错误,您需要了解以下内容。
一个正在运行的Angular应用程序是一个组件树。在变化检测过程中,Angular对每个组件执行检查,检查包括按指定顺序执行的以下操作:
所有子组件上的所有子components/directives
在变更检测期间还会执行其他操作。
在每次操作之后,Angular会记住它用来执行操作的值。它们存储在组件视图的oldValues属性中。检查完所有组件后,Angular然后开始下一个摘要周期,但它不执行上面列出的操作,而是将当前值与它在前一个摘要周期中记住的值进行比较:
请注意,此附加检查仅在开发模式下执行。
第二个问题:似乎最近几乎每天都有关于Angular抛出的ExpressionChangedAfterItHasBeenCheckedError错误的堆栈溢出问题。通常,这些问题的出现是因为Angular开发人员不了解变化检测是如何工作的,以及为什么需要进行产生此错误的检查。许多开发人员甚至将其视为一个bug。但它肯定不是。
你可以在标题中找到一个很好的例子:值改变的原因。https://blog.angularindepth.com/everything-you-need-to-know-about-the-expressionchangedafterithasbeencheckederror-error-e3fd9ce7dbb4
https://stackoverflow.com/questions/54200139
复制相似问题