首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >prodMode中的变化检测角度

prodMode中的变化检测角度
EN

Stack Overflow用户
提问于 2019-01-15 21:45:53
回答 1查看 352关注 0票数 0

嗨,我在angular中得到这个错误“表达式在它被检查后被改变了”,但我的应用程序的行为是真的。第一个问题是,如果发生错误,为什么组件可以正常工作?

例如,我有两个兄弟组件,它们像这样使用它们:

代码语言:javascript
复制
<cmp-a (onSelectItem)="selectedItem = $event"></cmp-a>
<cmp-b [selectedItem]="selectedItem"></cmp-b>

当cmp-a中的onSelectItem发出时,我将error.but selectedItem正确地传递给cmp-b,一切都很好,一切正常!

第二个问题是,如果真的发生了错误,为什么在prod模式下不通过angular框架显示此错误?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-01-15 21:59:36

我希望这能帮到你。我不喜欢使用链接,因为它可能会在未来中断。因此,关于这种类型的错误,您需要了解以下内容。

一个正在运行的Angular应用程序是一个组件树。在变化检测过程中,Angular对每个组件执行检查,检查包括按指定顺序执行的以下操作:

所有子组件上的所有子components/directives

  • call ngOnInit、OnChanges和ngDoCheck生命周期挂接的
  • 更新绑定属性/指令
  • 为当前组件更新DOM
  • 为子组件运行更改检测
  • 为所有子组件调用ngAfterViewInit生命周期挂接

在变更检测期间还会执行其他操作。

在每次操作之后,Angular会记住它用来执行操作的值。它们存储在组件视图的oldValues属性中。检查完所有组件后,Angular然后开始下一个摘要周期,但它不执行上面列出的操作,而是将当前值与它在前一个摘要周期中记住的值进行比较:

  • 现在检查传递给子组件的值是否与用于更新这些组件的属性的值相同现在
  • 检查用于更新DOM元素的值是否与用于更新这些元素的值相同现在
  • 对所有子组件执行相同的检查

请注意,此附加检查仅在开发模式下执行。

第二个问题:似乎最近几乎每天都有关于Angular抛出的ExpressionChangedAfterItHasBeenCheckedError错误的堆栈溢出问题。通常,这些问题的出现是因为Angular开发人员不了解变化检测是如何工作的,以及为什么需要进行产生此错误的检查。许多开发人员甚至将其视为一个bug。但它肯定不是。

你可以在标题中找到一个很好的例子:值改变的原因。https://blog.angularindepth.com/everything-you-need-to-know-about-the-expressionchangedafterithasbeencheckederror-error-e3fd9ce7dbb4

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54200139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档