【问题标题】:AngularJS select ng-options infinite digest errorAngularJS 选择 ng-options 无限摘要错误
【发布时间】:2019-04-10 15:14:22
【问题描述】:

我在 ng-options 中有一个带有函数调用的 select 标签:

<select ng-model='selectedList'
        ng-options='list.id as list.label
                    for list in listService.computeLists(resume)'
>

这会导致重复的无限摘要错误。

angular.js:14525 错误:[$rootScope:infdig] 达到 10 个 $digest() 迭代。中止!

有没有办法在ng-options 中调用这个函数而不会出现该错误?我试过记忆,但我无法让它工作。

【问题讨论】:

标签: angularjs angularjs-infdig


【解决方案1】:

当应用程序的模型变得不稳定并且每个$digest 循环触发状态更改和后续$digest 循环时,就会发生此错误。 AngularJS 会检测到这种情况并防止无限循环导致浏览器无响应。

一个常见的错误是绑定到一个每次调用它都会生成一个新数组的函数。例如:

<div ng-repeat="user in getUsers()">{{ user.name }}</div>
$scope.getUsers = function() {
  return [ { name: 'Hank' }, { name: 'Francisco' } ];
};

解决方法是在元素没有改变的情况下返回相同的数组对象。

var users = [ { name: 'Hank' }, { name: 'Francisco' } ];

$scope.getUsers = function() {
  return users;
};

有关详细信息,请参阅

【讨论】:

  • 或者,如果您有可能更改的数据,您可以缓存函数的结果并返回缓存的结果,除非结果已更改。 `var 缓存 = {}; $scope.getUsers = function(input) { if (cache[input]) return cache[input];否则返回缓存[输入] = 用户; }' 当然,'getUsers' 函数并不是最好的例子,因为用户可能不会根据输入而改变,但我相信你明白了。如果您有一个可以在多个地方重复使用的模板,并且您需要特定于每个实例的数据,那么这很有效。
猜你喜欢
  • 2017-12-31
  • 2014-09-15
  • 2014-07-26
  • 2012-10-14
  • 1970-01-01
  • 1970-01-01
  • 2015-11-04
  • 2019-01-08
相关资源
最近更新 更多