【问题标题】:Angular - Expression has changed after it was checked. Previous valueAngular - 表达式在检查后发生了变化。以前的值
【发布时间】:2017-02-18 18:18:55
【问题描述】:

当表达式的值发生变化时,很少会引发此错误并且应用程序不再响应。

我认为这个函数是:{{generalService.timeFromNow(item.creation_time)}}

调用:moment(timestamp, "X").fromNow()

随机地,当时间从 35 变为 36 时,发生了此错误。

如果我有另一个时间移动(滴答)分钟,则不会引发错误。

这种错误发生在我的应用程序中,我不想微观管理ngOnChanges,因为我认为 Angular 应该管理它。

【问题讨论】:

  • 当您在 angular2 中使用 enableprodmode 时,此错误消失。否则搜索在更改检测周期中更改值的项目。
  • @laser 但是出现此错误的原因是什么?为什么在更改检测期间更改会出现问题
  • 根据我的经验,我有一个例子:我有一个指令 [focusme]="true" 用于一个元素(结果是另一个元素)。当组件被解析和运行时,它为两个不同的输入渲染了两个指令,首先改变了一个输入的焦点,然后是另一个输入,并报告了这个错误,说在渲染过程中值发生了变化(通常情况下它不应该发生变化)。在这个错误之后我发现了我的错误 =)
  • 没有组件代码和模板是找不到的。

标签: angular ionic2


【解决方案1】:

这是 Angular2 在开发模式下的一项功能,可帮助检测不良设计。出现此错误表明您可能必须重新设计。

例如,假设您有两个带有此绑定的字段。像文本和图表。

{{generalService.timeFromNow(item.creation_time)}}

如果您不解决此问题,它们最终可能会时不时地在 Prod 中显示不同的值。这在您的正常测试中真的很难注意到,只有一小部分用户会注意到它。

解决方案通常是将'timeFromNow'的结果存储在某个状态变量中,这样它就不会随着更新周期而改变。

【讨论】:

    猜你喜欢
    • 2018-11-17
    • 1970-01-01
    • 2017-12-27
    • 2021-04-22
    • 2019-02-03
    • 2019-01-05
    • 1970-01-01
    相关资源
    最近更新 更多