angularjs – 错误:10 $digest()迭代到达 中止!与动态sortby谓词

前端之家收集整理的这篇文章主要介绍了angularjs – 错误:10 $digest()迭代到达 中止!与动态sortby谓词前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下代码,重复并显示用户名称和他的分数:
<div ng-controller="AngularCtrl" ng-app>
  <div ng-repeat="user in users | orderBy:predicate:reverse | limitTo:10">
    <div ng-init="user.score=user.id+1">
        {{user.name}} and {{user.score}}
    </div>
  </div>
</div>

和对应的角度控制器。

function AngularCtrl($scope) {
$scope.predicate = 'score';
$scope.reverse = true;
    $scope.users = [{id: 1,name: 'John'},{id: 2,name: 'Ken'},{id: 3,name: 'smith'},{id: 4,name: 'kevin'},{id: 5,name: 'bob'},{id: 6,name: 'Dev'},{id: 7,name: 'Joe'},{id: 8,{id: 9,{id: 10,{id: 11,{id: 1,name: 'Ken'}]
}

当我运行上面的代码,我得到错误:10 $ digest()迭代达到。中止!错误在我的控制台。

我已经创建了jsfiddle相同。

http://jsfiddle.net/JSWorld/7ecYd/1/

排序谓词仅在ng-repeat内部初始化,并且对对象数量应用限制。所以我觉得有sortby和limitTo观察者在一起是错误的原因。

如果$ scope.reverse是false(升序的分数),那么它不会报错。

任何人都可以帮助我明白这里错了什么?非常感谢您的帮助。

请检查这个jsfiddle: http://jsfiddle.net/bmleite/Hp4W7/.(代码基本上是相同的,你发布,但我使用一个元素,而不是窗口绑定滚动事件)。

据我所见,你发布的代码没有问题。您提到的错误通常发生在您在属性上创建更改循环时。例如,像在监视某个属性的更改,然后更改该属性在监听器上的值时:

$scope.$watch('users',function(value) {
  $scope.users = [];
});

这将导致错误消息:

Uncaught Error: 10 $digest() iterations reached. Aborting!
Watchers
fired in the last 5 iterations: …

请确保您的代码没有这种情况。

更新:

这是你的问题:

<div ng-init="user.score=user.id+1">

你不应该在渲染过程中改变对象/模型,否则会强制一个新的渲染(因此一个循环,导致’Error:10 $ digest()迭代达到。

如果要更新模型,请在Controller或指令上执行,不要在视图上。 angularjs文档recommends not to use的ng-init正是为了避免这种情况:

Use ngInit directive in templates (for toy/example apps only,not
recommended for real applications)

这里有一个工作示例的jsFiddle:http://jsfiddle.net/bmleite/7ecYd/3/

猜你在找的Angularjs相关文章