错误:使用警报时,angularjs中的$ digest已在进行中

时间:2013-05-03 03:37:30

标签: angularjs

我只是从控制器中的服务获取json数据。

我正在使用回调函数在加载时打印成功消息。它工作正常,但它也抛出了我在问题中提到的错误

//JSON file
{
"pc":"name"
}

// angular services
var service = angular.module('Services', ['ngResource']).
factory('Widgets', function($resource){
    return $resource('/json/home.json', {}, {
        query: {method:'GET', params:{}, isArray:false}
    });
});

//controller
function editWidget($scope, Widgets) {
 $scope.data = Widgets.query(function(data) {   
    alert("Success Data Loaded ---> " + JSON.stringify(data.pc));
 });
}

4 个答案:

答案 0 :(得分:12)

alert,以及confirmprompt将暂停执行代码(阻止线程),在此期间如果应该在超时期间触发超时和间隔暂停。 $digest循环由两个较小的循环组成,它们处理$evalAsync队列和$watch列表。 $evalAsync队列用于调度需要在当前堆栈帧之外但在浏览器的视图渲染之前发生的工作。这通常使用setTimeout(0)完成。在此期间您的警报会导致问题。

答案 1 :(得分:10)

在摘要周期完成后,您可以使用$ timeout来执行警报,这样可以避免此错误。

$timeout(function () {
    alert('Alert text');
 }); 

也不要忘记在指令中注入$ timeout

答案 2 :(得分:0)

if(!confirm('Your message')){
  return false;
}else {
  return false;
}

在两种情况下都返回false。

答案 3 :(得分:-2)

@TheSharpieOne是对的,它适合我。



function delayalert(messagestr){
           setTimeout(function(){
                alert(messagestr);
            },0);
}