首页 > 解决方案 > Angular 2:表达式在检查后发生了变化

问题描述

短篇小说:Expression has changed after it was checked. Previous value: 'xx'. Current value: 'xx'. ,当我从我的组件更新变量时出现错误。

长话短说: 我有一个ParentComponent包含我正在更新的变量,名为totalAmount. 然后我有一个ChildComponent影响值totalAmount但无权访问所述变量的值。发生的情况是我有一个subtotal变量,ParentComponent我传递给ChildComponent使用@Input然后我只是重新计算totalAmount从,ParentComponent因为我可以访问subtotal它。像这样:

ParentComponent.ts

this.totalAmount = this.subtotal + (some other values)

然后我ParentComponentTemplate.html像这样显示它:

<span>{{ totalAmount | money }}</span>

一切正常。然后突然totalAmount必须在一个input盒子里,因为应该有一种方法可以覆盖它。span所以我不得不这样做,而不是一个元素:

<input type="text" name="totalAmount" [(ngModel)]="totalAmount" />

现在问题开始了。每次subtotal在我的ChildComponent更改中,我都会收到错误消息Expression has changed after it was checked. Previous value: 'xx'. Current value: 'xx'

现在我已经阅读了几篇关于这个的文章,它是 Angular 中的一个特性,但是我们该怎么做呢?有没有解决方案而不是解决方法?

提前致谢!

标签: angular

解决方案


解决方案是您必须了解错误并相应地更改代码。

尽管非常明确,但此错误并未说明它是生命周期错误

如果你想解决这个问题,你需要遵循生命周期,而不是尝试看看会发生什么。

尽管您似乎相信您发布了足够多的代码,但您没有:下次发布您的整个代码而不是解释,因为即使您看起来很清楚,它也不适合我。

最后,javascript 变量通过引用传递:这意味着当您更改输入的值时,您更改的是引用,而不是值。

所以,你可以尝试什么:

  • 父母有总金额
  • 孩子没有@Input
  • <input>孩子的值发生变化时,您会发出一个事件
  • 父母监听那个事件,并相应地改变总值

推荐阅读