我只是想明白为什么在下面的jsFiddle'这里是一个'被打印三次。
http://jsfiddle.net/wg385a1h/5/
$scope.getLog = function () {
console.log('here is a log');
}
有人可以解释我为什么吗?我应该更改为只有一个日志"这是一个日志" (这就是我想要这个小提琴的事情)。非常感谢。
答案 0 :(得分:2)
Angular使用摘要周期/迭代来确定状态何时发生变化并需要更新UI。如果它在其中一个循环中发现任何变化,它会一直重新循环,直到数据稳定为止。如果它完成了10个周期并且数据仍然在变化,那么您将看到一条相当明确的消息:" angularjs达到10次迭代。中止"
因此,您看到3次显示的消息是因为您有一个简单的界面。实际上,由于您的指令使用{{getLog()}},因此您可以在日志中获得更多此类消息。 Angular继续评估表达式以查看它是否发生了变化。
为了避免此类问题,在正常情况下,您应该将您想要调用的函数返回的值只存储在控制器内的$ scope对象中,并在UI中使用该变量(而不是函数调用)。 p>
所以在控制器中你有$ scope.log = getLog()[假设它返回一些内容,而不只是写入控制台]并且在指令中使用模板{{log}}。这样,每个控制器实例只能获取一次值。
希望我足够清楚。