我正在写一些有角度的东西(仍在学习),并发现虽然我的射击方法我看到重复的结果。 我准备了非常简单的代码来模拟这个 的index.html:
{{show()}}
(function(){
var app = angular.module('test', []);
app.controller('testController', ['$scope', function($scope){
$scope.show = function(){
console.log('test');
};
}]);
})();
在chrome控制台中我可以看到' test'显示3次..为什么会这样? 我写的其他脚本中有这个问题,有时会显示两次,我做错了什么? 有人可以告诉我吗? 感谢
答案 0 :(得分:2)
你看到的是Angular的$摘要周期的结果。
https://docs.angularjs.org/api/ng/type/$rootScope.Scope
来自Angular docs ......
$消化(); 处理当前范围的所有观察者及其子女。因为观察者的监听器可以改变模型,所以$ digest()不断调用监视器,直到不再有监听器被触发为止。这意味着可以进入无限循环。此函数将抛出“超出最大迭代限制”。如果迭代次数超过10次。
每个$ digest将评估所有观察者,在您的情况下,每次都会调用您的函数。
如果您对如何发生这种情况非常好奇,那么在Angularjs源代码中的$ digest函数上放置一个断点,您将看到您的函数作为该循环的一部分被调用。基本上进入do-while循环并执行你的函数,直到它的内部逻辑满足,不再需要更多的摘要周期。对于您的代码所展示的简单案例,这恰好是三次。
上述循环的精简版本是您的函数执行一次以初始化$ digest循环中的监视值。然后在循环循环中对其进行评估,以查看是否有任何更改,从而导致对函数的第二次调用。最后,第三次执行发生,如果值没有改变,$ digest逻辑满足于我们可以结束循环。
答案 1 :(得分:-1)
如何在HTML中使用它:
{{show}}