angulr 报错:$digest already in progress

在使用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);
经验分享 程序员 微信小程序 职场和发展