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;
  };