【发布时间】:2025-07-19 22:50:02
【问题描述】:
考虑以下plunker
这里是html
<div ng-repeat="(id, testOject) in filterList()">
<div ng-if="testOject['state']">
{{testObject}}
</div>
</div>
这里是相关的js
$scope.test = {
'1': {'state': true, 'label': '1'}
}
$scope.filterList = function() {
var map = {};
for (var key in $scope.test){
if($scope.test[key]['state']) {
map[key] = {
'state': $scope.test[key]['state'],
'label': $scope.test[key]['label']
}
}
}
return map;
};
以上代码导致10 $digest() iterations reached错误。
但是,如果我们稍微修改一下code。
$scope.filterList = function() {
var map = {};
for (var key in $scope.test){
if($scope.test[key]['state']) {
map[key] = true
}
}
return map;
};
错误没有发生
似乎触发了更改检测,当更新了包含全新对象的新key,但我的字典中只有 1 个对象时,为什么它会循环通过更改检测 10 次?
【问题讨论】:
-
将执行摘要,同时您的范围发生变化。如果数据已经过滤,而不是新创建的,过滤器应该返回相同的对象/数组。
标签: javascript angularjs dictionary