angulr 报错:$digest already in progress

本文探讨了在AngularJS中使用$scope.$apply()或$scope.$digest()时可能遇到的$digest already in progress错误。通过检查$$phase变量状态或利用$timeout函数,可以有效避免重复调用导致的错误,确保脏值检测正常进行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值