我想在ng-repeat属性中调用函数,这是我的代码
HTML
<body ng-controller="mainCtrl">
<div ng-repeat='item in getGroupedRange() track by item.id'>
<span>{{item.val}}</span>
<span>{{item.abs}}</span>
<span>{{item.rel}}</span>
<span>{{item.cum}}</span>
</div>
</body>
Run Code Online (Sandbox Code Playgroud)
JS
$scope.getGroupedRange = function() {
return [
{
val: 1,
abs: 1,
rel: 1,
cum: 1,
id: 123456
}
];
};
Run Code Online (Sandbox Code Playgroud)
当我打开控制台时,我注意到了错误
10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: [[{"msg":"fn: function (c,d,e,f){e=a(c,d,e,f);return b(e,c,d)}","newVal":9,"oldVal":8}],[{"msg":"fn: function (c,d,e,f){e=a(c,d,e,f);return b(e,c,d)}","newVal":10,"oldVal":9}],[{"msg":"fn: function (c,d,e,f){e=a(c,d,e,f);return b(e,c,d)}","newVal":11,"oldVal":10}],[{"msg":"fn: function (c,d,e,f){e=a(c,d,e,f);return b(e,c,d)}","newVal":12,"oldVal":11}],[{"msg":"fn: function (c,d,e,f){e=a(c,d,e,f);return b(e,c,d)}","newVal":13,"oldVal":12}]]
Run Code Online (Sandbox Code Playgroud)
我的代码的主要目标是使用ng-repeat中的函数来计算每个事件循环中的数据
不,你不能ngRepeat像这样使用功能.问题是Angular使用摘要循环中对象的严格比较来确定自上次检查后属性的值是否发生了变化.所以会发生什么,每次调用时getGroupedRange返回新值(新数组).Angular不知道并认为这个值不稳定,因此继续检查.但它在10次检查后中止.
您需要构造必要的数组并将其分配给scope属性,因此在摘要循环期间不会更改:
$scope.groupedRange = $scope.getGroupedRange();
Run Code Online (Sandbox Code Playgroud)
然后像在ngRepeat中一样使用它
<div ng-repeat='item in groupedRange track by item.id'>
<span>{{item.val}}</span>
<span>{{item.abs}}</span>
<span>{{item.rel}}</span>
<span>{{item.cum}}</span>
</div>
Run Code Online (Sandbox Code Playgroud)
找到了解决方案:
$scope.prev = null;
$scope.getGroupedRange = function() {
var data = [{
val: 1,
abs: 1,
rel: 1,
cum: 1,
id: 123456
}];
if (angular.equals($scope.prev, data)) {
return $scope.prev;
}
$scope.prev = data;
return data;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6067 次 |
| 最近记录: |