在使用angularJS中的$scope.$apply()或者$scope.$digest()可能会遇到这样的错误:
Error: [$rootScope:inprog] $digest already in progress
报错源码
if($rootScope.conFootTap){
$rootScope.conFootTapShow=true;
$rootScope.$apply();
}
目前来说没有发现报错信息对项目有什么影响,但是看着红字就是有点难受,所以在网上找到了这样一个方法区解决:
($scope.$$phase || $scope.$root.$$phase) ? '' : $scope.$apply();
angular中的$scope中提供了一个$$phase变量,如果这个变量的值是"$digest" 或者"$apply",就代表angular自身已经在做脏值检测了,不需要我们再去调用$apply或者$digest;否则的话就需要我们手动调用了。
当然还有另一种方法,用$timeout:
$timeout(fn,[delay],[invokeApply]); 参数说明
fn:一个将被延迟执行的函数。
delay:延迟的时间(毫秒)。
invokeApply:如果设置为false,则跳过脏值检测,设置为true就会调用$apply,实现我们想要的效果。
$timeout(function() {
$rootScope.conFootTapShow=true;
},0,true);
本文探讨了在AngularJS中使用$scope.$apply()或$scope.$digest()时可能遇到的$digest already in progress错误。通过检查$$phase变量状态或利用$timeout函数,可以有效避免重复调用导致的错误,确保脏值检测正常进行。
1932

被折叠的 条评论
为什么被折叠?



