在使用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);