Ошибка: $digest уже выполняется в 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));
 });
}

Ответ 1

alert, а также confirm и prompt приостанавливает выполнение кода (блокирует поток), в течение которого тайм-ауты и интервалы идут все в порядке, если они должны были срабатывать во время паузы. Цикл $digest состоит из двух меньших циклов, которые обрабатывают очередь $evalAsync и список $watch. Очередь $evalAsync используется для планирования работы, которая должна выполняться вне текущего фрейма стека, но перед визуализацией браузера. Обычно это делается с помощью setTimeout(0). Ваше предупреждение в течение этого времени вызывает проблему.

Ответ 2

Вы можете использовать $timeout для выполнения предупреждения после выполнения цикла дайджест и таким образом избежать этой ошибки.

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

Также не забудьте ввести $timeout в свою директиву

Ответ 3

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

В обоих случаях возвращает false.

Ответ 4

@TheSharpieOne прав, он работает для меня.

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