ng-重复太多次迭代

时间:2017-03-21 23:03:01

标签: angularjs meteor angular-meteor

我正在使用angular-meteor,并希望对每个对象执行一个函数。我尝试在视图中的ng-repeat中运行此函数,但是我收到了大量的函数调用,无法找出原因。我试图让它变得尽可能简单,以展示正在发生的事情。

constructor($scope, $reactive) {
    'ngInject';
    $reactive(this).attach($scope);
    this.loaderCount = 0;

    this.helpers({
        loaders() {
            return Loaders.find( {isloader:true}, {sort: { name : 1 } })
        }
    });

这给了我26台装载机。每次调用函数时,我的函数只会将计数加1:

displayLoaderCount()
{
    return ++this.loaderCount;
}

现在在我看来,我循环遍历每个加载器,并调用该函数。这应该在我的脑海里给我26,但我得到3836。

 <tr ng-repeat="loader in loaderExhaustion.loaders">
        <td>{{loaderExhaustion.displayLoaderCount()}}</td>

任何人都可以帮我解释一下吗?理想情况下,我想循环遍历模块中的内容,但由于集合是异步的,当循环开始时,集合的长度为0,因此我在视图中进行调用。

谢谢!

1 个答案:

答案 0 :(得分:1)

每次angular进入更改检测周期时,它都会评估loaderExhaustion.displayLoaderCount(),以了解此表达式的结果是否已更改,并更新DOM(如果已更改)。此函数更改控制器的状态(因为它递增this.loaderCount),从而触发另一个更改检测循环,重新评估表达式,这会更改控制器的状态等等。

您不能在这样的表达式中更改状态。对于给定的状态,angular应该能够调用此函数两次,并获得两次相同的结果。这些表达不得有副作用。

通过这样做我无法理解你想要达到的目标,所以很难说出你应该做什么。