检查后表情发生了变化。 Angular 2问题

时间:2017-01-30 17:04:23

标签: javascript angular

模板

<tbody>
  <tr>
    <td>{{getRand()}}</td>
    <td>{{getRand()}}</td>
  </tr>
</tbody>

方式

getRand(){
  return Math.floor(Math.random()*100);
}

错误

Expression has changed after it was checked. Previous value: '90'. Current value: '32'.

任何人都能解释为什么会出现这种错误吗?为什么我不能多次调用这个方法?

2 个答案:

答案 0 :(得分:1)

你有服务器端渲染吗?

不确定角度但是在React上,如果你有服务器端渲染,渲染的值将在客户端重新评估,它会引发一些关于它的错误/警告。

答案 1 :(得分:1)

这是角度变化检测的工作原理!

Angular中的更改检测算法在特定时间(某些事件)通过组件树来确定已更改的内容。

然后根据模型更改和UI绑定更新UI。

在开发模式下(查看https://angular.io/docs/ts/latest/api/core/index/enableProdMode-function.htmlwhat exactly happens when `enableProdMode()`What is difference between production and development mode in Angular2?),此组件步行执行两次,以确保模型在更改后保持稳定。在您的情况下,用于绑定的函数不是无副作用的,因为函数的每次调用都返回不同的值。

根据经验,使用无副作用的自由绑定。