Obtenir AngularJS Erreur: "[$ rootScope: inprog] $ digest déjà en cours" sans manuel $ apply
Autres postes sur cette erreur incluent toujours quelqu'un qui essaie de $s'appliquent sans l'aide d'un coffre-fort appliquer, mais ce n'est pas le cas dans mon exemple. Ma fonction EST de réintégrer les données que j'ai demandé à partir de l'API, mais je ne peux pas nettoyer ce bug et ça me rend fou.
À chaque fois avant le .le succès est appelé dans mon $http fonction je reçois le message "Erreur: [$rootScope:inprog] $digest déjà en cours" dans la console. Ci-dessous sont mes contrôleur et de service. Merci!
Voici mon service, y compris une fonction de poster un $http appel avec une charge utile:
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;
}]);
Et voici mon contrôleur qui appelle le service:
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);
}]);
Le journal ci-dessous var new_cool_data est appelé avant l'opération asynchrone, mais new_cool est affectée à l'intérieur de l' .ensuite relevé dans les getCoolData.
Toute aide se débarrasser de ce bug ou pas de merde en général serait grandement apprécié!
Voici l'ensemble d'erreur:
https://gist.github.com/thedore17/bcac9aec781ef9ba535b
source d'informationauteur TedCap
Vous devez vous connecter pour publier un commentaire.
Ajouter cette petite méthode et de l'appeler en place de appliquer()
Ce résoudre le problème pour moi. Il suffit d'ajouter une seule fois, mais vous n'avez pas besoin de vous changer de code plus:
https://github.com/angular/angular.js/issues/10083#issuecomment-145967719
J'ai utilisé une solution alternative en mettant $scope.$appliquer() dans le délai d'expiration de ce genre et il a travaillé...
Je pense que c'est juste parce que, angulaire de l'appliquer cycle de vie était déjà en cours d'exécution et mon manuel $s'appliquent a interrompu.
Il y a une solution plus facile:
Ou tout simplement:
Cela évite les problèmes causés par le $scope.$appliquer(), mais il convient de noter qu'il ne s'exécute pas immédiatement (qui fait partie de la raison pour laquelle vous n'obtiendrez pas le inprog d'erreur). J'ai utiliser ce lieu de $scope.$appliquer() et il m'a sauvé de beaucoup de problèmes.
Voir: https://docs.angularjs.org/api/ng/type/$rootScope.Champ#$evalAsync