我想通过控制器函数提供ng-repeat
元素,如下所示:
<div ng-repeat="picture in allPictures(data.pictures)"></div>
$scope.allPictures = function(pictures) {
alert("function called");
//return... extract all pictures and return as array
}
结果:我的allPictures
函数被多次调用,即使我希望它只被调用一次然后迭代结果。
为什么呢?而且:我怎样才能防止这种情况,并且只为图像供应一次调用该方法?
答案 0 :(得分:4)
我真的会避免在函数内部调用ngRepeat属性,因为它会给出错误和意外行为。
但说实话,我不认为你需要在ngRepeat中调用一个函数。我建议做以下事情:
<div ng-repeat="picture in allPictures"></div>
$scope.getPictures = function(pictures) {
alert("function called");
//return... extract all pictures and return as array
};
$scope.allPictures = $scope.getPictures();
这样将调用$ scope.getPictures函数并创建$ scope.allPictures。 ngRepeat可以调用该集合而不是函数。
答案 1 :(得分:1)
关于摘要周期的一点点:
每当应用程序中的某些内容发生变化时,我们都需要进行检查 - 该更改会对此产生什么影响,并重新评估可能依赖于该更改的所有位置,这就是为什么ng-repeat中的函数被多次调用的原因 - 它必须检查在应用程序中发生某些更改后重复列表是否相同
详细了解摘要周期和双向数据绑定:
http://blog.bguiz.com/post/60397801810/digest-cycles-in-single-page-apps/