AngularJS orderBy与ngModel相同的属性引发$digest错误
AngularJS orderBy same property as ngModel throws $digest error
当我尝试在ng-repeat
中绑定到的属性orderBy时,会出现$digest
错误。我认为发生这种情况是因为在一个摘要中,ng-model
值正在更新,这会影响父orderBy
子句。我不知道如何避开这件事。
Plunker(更新)
这显示了问题的发生。一定要打开控制台!
http://embed.plnkr.co/rGLagq/preview
JS
var options = [
{
name: 'test',
isSelected: true
},
{
name: 'another test',
isSelected: false
}
];
HTML
<div ng-repeat="option in options | orderBy:'-isSelected'">
<label>
<input type="checkbox"
ng-model="option.isSelected"> {{option.name}}
</label>
</div>
错误
Error: [$rootScope:inprog] $digest already in progress
此问题是由angular中的一个错误引起的:
https://github.com/angular/angular.js/issues/10014
希望通过以下方式解决:https://github.com/angular/angular.js/pull/9808
目标修复版本:1.3.4
确保没有像$scope这样的手动调用$apply()或$scope$您的代码中的摘要将手动启动摘要循环。您在这里显示的代码应该是可以的。
当您以编程方式(从Angular内部)触发代码(如DOM事件)时,有时会发生inprog错误,该代码通常由外部触发器调用。这种错误通常很难处理。最好的办法是使用$timeout等待摘要完成,然后再执行任务。我已经使用$timeout修改了您的代码以提供预期的功能。请看下面的代码。要了解更多关于inprog的问题,请参阅此链接
https://docs.angularjs.org/error/$rootScope/inprog
HTML
<body ng-controller="MainCtrl">
<div ng-repeat="option in options | orderBy:'-isSelected'">
<label>
<input type="checkbox" ng-click="option.selected()"> {{option.name}}
</label>
</div>
</body>
JS-
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope, $timeout) {
var myScope = $scope;
myScope.options = [];
for (var i = 1; i <= 10; i++) {
myScope.options.push(new function(){
var myself = this;
myself.name = 'Tag ' + i;
myself.isSelected = false;
myself.selected = function() {
$timeout(function() {
myself.isSelected = !myself.isSelected;
myScope.$apply();
}, 0, false);
};
});
}
});
相关文章:
- Angular-错误:达到10$digest()迭代.正在中止
- 如何避免$digest正在进行中的错误
- AngularJS错误:$rootScope:infdig Infinite$digest循环:达到10次$digest
- $digest不久之后$watch定义触发“$apply已经在进行中.“错误
- AngularJS 错误:$rootScope:infdig 无限$digest循环
- JavaScript 运行时错误:[$rootScope:infdig] 达到 10 次$digest() 迭代.中止!
- AngularJs:错误:用于配对项目的自定义筛选器引发错误:“达到 10 次 $digest() 迭代.流产!
- AngularJS orderBy与ngModel相同的属性引发$digest错误
- AngularJS:未捕获错误:已达到[$rootScope:infdig]10$digest()迭代
- 调用ng-erepeat内部的API函数,提示错误.达到10$digest()迭代.在angularjs中中止
- 角度$digest错误
- 错误:在同一个angular Js函数中使用两个Http请求调用时,$digest已经在进行中
- 角度错误:达到10$digest()迭代
- 在角度1.1.x中为ng重复写入的滤波器的$digest迭代错误
- 随机函数触发$digest()错误
- Angular JS错误:达到10$digest()迭代.正在中止
- 避免“$digest already in progress”;错误
- 谷歌地图显示未捕获的错误:达到10次$digest()迭代.流产!角的应用
- 错误:[$rootScope:inprog] $digest已经在进行中
- $watch上的$digest错误导致模型更改