angularjs - 获取 AngularJS 错误 : "[$rootScope:inprog] $digest already in progress" without a manual $apply

标签 angularjs angularjs-service angularjs-controller angularjs-http

关于此错误的其他帖子总是包括有人在不使用安全应用的情况下尝试 $apply,但在我的示例中并非如此。我的函数成功返回了我从 API 请求的数据,但我无法清除这个错误,这让我发疯。
每次在 $http 函数中调用 .success 之前,我都会在控制台中收到“错误:[$rootScope:inprog] $digest already in progress”。下面是我的 Controller 和服务。谢谢!

这是我的服务,包括一个使用有效负载发布 $http 调用的函数:

Services.service( 'CoolService', ['$q', '$rootScope', '$http', 'Auth', function($q, $rootScope, $http, Auth){
var service = {
    create: function(payload){
        var deferred = $q.defer();
        $http({
            'url': '/api/endpoint/',
            'dataType':'json',
            'method': 'POST',
            data: payload
        }).success(function(data,status, headers, config){
            deferred.resolve(data);

        })
        .error(function(data, status, headers, config){
            deferred.reject("Error in request.");
        });
        return deferred.promise;
        }
    }
    return service;
}]);

这是我调用服务的 Controller :
controllers.controller('CoolCtrl',['$scope', '$modal', '$log','CoolService', function($scope, $modal, $log, CoolService){
    getCoolData = function (input_data) {
        CoolService.create(input_data).then(function(results){
            new_cool = results.results;
        }, function(error){
        console.log("there was an error getting new cool data");
        });
    };
    var payload = {
        user_id: data1,
        cool_id: data2,
    }
    var new_cool_data = getCoolData(payload);
    console.log(new_cool_data);
}]);

var new_cool_data 下面的日志在异步操作之前被调用,但 new_cool 确实在 getCoolData 的 .then 语句中被分配。
任何帮助摆脱这个错误或使它不糟糕的帮助都将不胜感激!

这是整个错误:
https://gist.github.com/thedore17/bcac9aec781ef9ba535b

最佳答案

添加这个小方法并调用它代替 apply()

function CheckScopeBeforeApply() {
    if(!$scope.$$phase) {
         $scope.$apply();
    }
};

关于angularjs - 获取 AngularJS 错误 : "[$rootScope:inprog] $digest already in progress" without a manual $apply,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21858841/

相关文章:

angularjs - 如何更改图例位置?

javascript - Uglifyjs 改变 Angular 脚本

javascript - AngularJS:如何与其他 Controller 共享作用域函数和变量

javascript - 以下 agularjs Controller 定义有什么区别?

javascript - 从 Controller 中选择选择框选项

css - 如何使用 Visual Studio Code(在 Mac 上)禁用 HTML 文件的 CSS 错误

javascript - Angular 单元测试服务元素持久性

javascript - AngularJS 在范围更改时不更新模板变量

Angular : factory function undefined in controller

javascript - Angular : Not able to access variables in controller using service