Immer AngularJS Fehler: "[$rootScope:inprog] $digest-bereits-in-progress" ohne Handbuch $gelten
Anderen Beiträgen auf diesen Fehler schließen immer jemand versucht, $anwenden, ohne die Verwendung eines sicher gelten, aber das ist nicht der Fall in meinem Beispiel. Meine Funktion IST erfolgreich, sodass die Daten, die ich angefordert von der API, aber ich kann nicht reinigen Sie diesen Fehler und es treibt mich in den Wahnsinn.
Jedes mal vor dem .Erfolg heißt in my $http-Funktion bekomme ich die Fehlermeldung "Fehler: [$rootScope:inprog] $digest bereits im Gange" in der Konsole. Hier sind meine controller und service. Danke!
Hier mein service sowie eine Funktion für das posten eines $http-Aufruf mit einer Nutzlast:
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;
}]);
Und hier ist mein controller die Anrufe der 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);
}]);
Log unter var new_cool_data wird aufgerufen, bevor der asynchrone Betrieb, aber new_cool zugeschlagen werden, innerhalb der .then-Anweisung innerhalb getCoolData.
Alle helfen, loszuwerden, diese Fehler zu machen, oder es nicht beschissen im Allgemeinen würde sehr geschätzt werden!
Hier die ganze Fehlermeldung:
https://gist.github.com/thedore17/bcac9aec781ef9ba535b
Dies ist der ganze Text: gist.github.com/thedore17/bcac9aec781ef9ba535b
Ihr Fehler ist passiert im ui-bootstrap, nicht Ihren service: (anonyme Funktion) ui-bootstrap-tpls-0.10.0.js:1539
Das erklärt einiges, danke. Alles, was ich über es tun können? Technisch funktioniert alles, aber ich glaube, es kann nicht gut sein, bekomme ich diesen Fehler.
Naja, es ist open-source, so könnte man immer ein Graben in der ui-bootstrap-Bibliothek. 🙂 Oder öffnen Sie ein Problem auf Ihrer Website.
InformationsquelleAutor TedCap | 2014-02-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fügen Sie diese kleine Methode und nennen es inplace von apply()
Ja, das ist ein anti-pattern. Siehe unten meine Antwort für eine alternative.
InformationsquelleAutor HandyManDan
Diese lösen das Problem für mich. Fügen Sie es einfach eine Zeit, die Sie nicht brauchen, ändern Sie den code:
https://github.com/angular/angular.js/issues/10083#issuecomment-145967719
InformationsquelleAutor Aminadav Glickshtein
Ich verwendet Alternative Lösung, indem Sie $scope.$apply () - timeout so, und es funktioniert...
Ich denke, es ist einfach da, kantige, anwenden Lebenszyklus bereits ausgeführt wurde, und mein Handbuch $gelten hat ihn gestört.
InformationsquelleAutor Sahil Kanani
Gibt es eine einfachere Lösung:
Oder einfach:
Dies vermeidet die Probleme, die von $scope.$apply(), obwohl es sollte darauf hingewiesen werden, dass es nicht sofort ausgeführt (das ist Teil der Grund, warum Sie nicht bekommen, die inprog-Fehler). Ich verwende diese anstelle von $scope.$apply() und es hat mich gerettet, so viel Mühe.
Finden Sie unter: https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$evalAsync
InformationsquelleAutor Sam