Javascript 为什么过滤字典上的“ng repeat”会导致“10$digest()迭代次数达到”错误?
考虑以下几点 这是Javascript 为什么过滤字典上的“ng repeat”会导致“10$digest()迭代次数达到”错误?,javascript,angularjs,dictionary,Javascript,Angularjs,Dictionary,考虑以下几点 这是html <div ng-repeat="(id, testOject) in filterList()"> <div ng-if="testOject['state']"> {{testObject}} </div> </div> 上述代码导致10$digest()迭代次数达到错误 但是如果我们稍微修改一下 错误没有发生 当更新包含全新对象的新键时,似乎触发了更改检测,但
html
<div ng-repeat="(id, testOject) in filterList()">
<div ng-if="testOject['state']">
{{testObject}}
</div>
</div>
上述代码导致10$digest()迭代次数达到
错误
但是如果我们稍微修改一下
错误没有发生
当更新包含全新对象的新键时,似乎触发了更改检测,但我在字典中只有一个对象,为什么它会循环更改检测10次?:
当应用程序的模型变得不稳定且
每个$digest
循环都会触发状态更改和后续的$digest
周期Angular检测这种情况并防止无限循环
使浏览器变得无响应
例如,可以通过在路径上设置手表来实现这种情况
然后在值更改时更新相同的路径
一个常见的错误是绑定到生成新
每次调用该数组时都会使用它。例如:
$digest循环允许的最大迭代次数为
通过TTL设置控制,TTL设置可通过
对于您的案例,您可以使用以下代码:
从
i、 e.当您的模型在两个连续循环之间不再发生变化时,摘要将停止
守则:
map[key] = {
'state': $scope.test[key]['state'],
'label': $scope.test[key]['label']
}
map[key] = true
在每个摘要循环中为map[key]
指定一个新对象,因此模型永远不会稳定
守则:
map[key] = {
'state': $scope.test[key]['state'],
'label': $scope.test[key]['label']
}
map[key] = true
为map[key]
指定一个基本布尔值,该布尔值在两个连续摘要周期之间不会改变,因此模型变得稳定
要稳定地图,您可以创建一个范围变量,只需更改map[key]
对象的属性。看
当范围更改时,将执行摘要。如果数据已经过滤,而不是新创建的,则筛选器应该返回相同的对象/数组。但它只更改一次,因为我的字典大小为1,所以它应该在10个循环的限制范围内?@testing我指的不是(var key in$scope.test)的
。我指的是消化周期。因此,循环1调用filterList(),并$scope.map['1']=newObject
。循环2,调用filterList(),并$scope.map['1']=另一个新对象
。因此,$scope.map['1']
是摘要周期1和2之间的不同对象,因此周期3开始。第3次循环将不同于第2次循环,因此第4次循环将开始,依此类推。。。
var users = [ { name: 'Hank' }, { name: 'Francisco' } ];
$scope.getUsers = function() {
return users;
};
var map = {};
$scope.createArray = function() {
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;
};
$scope.filterList = function() {
return map;
}
The $digest loop keeps iterating until the model stabilizes
map[key] = {
'state': $scope.test[key]['state'],
'label': $scope.test[key]['label']
}
map[key] = true
$scope.map = {};
$scope.filterList = function() {
for (var key in $scope.test){
if($scope.test[key]['state']) {
$scope.map[key] = $scope.map[key] || {};
$scope.map[key].state = $scope.test[key]['state'];
$scope.map[key].label = $scope.test[key]['label'];
}
}
return $scope.map;
};