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

JSA*_*ict 10 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));
 });
}
Run Code Online (Sandbox Code Playgroud)

The*_*One 12

alert,以及confirmprompt将暂停代码执行(阻塞线程),在此期间,超时,如果他们应该已经在暂停期间触发间隔全力以赴失控.该$digest循环由两个较小圈,其过程的$evalAsync队列和$watch列表.该$evalAsync队列用于调度需要在当前堆栈帧之外但在浏览器的视图渲染之前发生的工作.这通常是用setTimeout(0).在此期间您的警报会导致问题.


tyl*_*lik 10

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

$timeout(function () {
    alert('Alert text');
 }); 
Run Code Online (Sandbox Code Playgroud)

另外,不要忘记在指令中注入$ timeout