为什么ng-repeat中的函数被多次调用?

时间:2015-08-11 12:51:44

标签: javascript angularjs

我想通过控制器函数提供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函数被多次调用,即使我希望它只被调用一次然后迭代结果。

为什么呢?而且:我怎样才能防止这种情况,并且只为图像供应一次调用该方法?

2 个答案:

答案 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可以调用该集合而不是函数。

另见我的小提琴:https://jsfiddle.net/ABr/w6kc8qyh/1/

答案 1 :(得分:1)

关于摘要周期的一点点:

每当应用程序中的某些内容发生变化时,我们都需要进行检查 - 该更改会对此产生什么影响,并重新评估可能依赖于该更改的所有位置,

这就是为什么ng-repeat中的函数被多次调用的原因 - 它必须检查在应用程序中发生某些更改后重复列表是否相同

详细了解摘要周期和双向数据绑定:

http://blog.bguiz.com/post/60397801810/digest-cycles-in-single-page-apps/