模板:
<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'.
任何人都能解释为什么会出现这种错误吗?为什么我不能多次调用这个方法?
答案 0 :(得分:1)
你有服务器端渲染吗?
不确定角度但是在React上,如果你有服务器端渲染,渲染的值将在客户端重新评估,它会引发一些关于它的错误/警告。
答案 1 :(得分:1)
这是角度变化检测的工作原理!
Angular中的更改检测算法在特定时间(某些事件)通过组件树来确定已更改的内容。
然后根据模型更改和UI绑定更新UI。
在开发模式下(查看https://angular.io/docs/ts/latest/api/core/index/enableProdMode-function.html和what exactly happens when `enableProdMode()`和What is difference between production and development mode in Angular2?),此组件步行执行两次,以确保模型在更改后保持稳定。在您的情况下,用于绑定的函数不是无副作用的,因为函数的每次调用都返回不同的值。
根据经验,使用无副作用的自由绑定。