10

我只是从控制器中的服务中获取 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

4 回答 4

12

alert,以及confirm并且prompt将暂停代码的执行(阻塞线程),在此期间,如果应该在暂停期间触发超时和间隔,它们就会完全失控。该$digest循环由两个较小的循环组成,分别处理$evalAsync队列和$watch列表。$evalAsync队列用于安排需要在当前堆栈框架之外发生的工作,但在浏览器的视图呈现之前。这通常使用setTimeout(0). 您在此期间的警报会导致问题。

于 2013-08-21T02:19:42.157 回答
10

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

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

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

于 2014-11-18T19:29:06.793 回答
0
if(!confirm('Your message')){
  return false;
}else {
  return false;
}

在这两种情况下都返回 false。

于 2017-02-22T08:46:56.713 回答
-2

@TheSharpieOne is right, It's work for me.

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

于 2017-03-11T09:28:34.303 回答