我正在使用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,因此我在视图中进行调用。
谢谢!
答案 0 :(得分:1)
每次angular进入更改检测周期时,它都会评估loaderExhaustion.displayLoaderCount()
,以了解此表达式的结果是否已更改,并更新DOM(如果已更改)。此函数更改控制器的状态(因为它递增this.loaderCount)
,从而触发另一个更改检测循环,重新评估表达式,这会更改控制器的状态等等。
您不能在这样的表达式中更改状态。对于给定的状态,angular应该能够调用此函数两次,并获得两次相同的结果。这些表达不得有副作用。
通过这样做我无法理解你想要达到的目标,所以很难说出你应该做什么。