$ Apply wird bereits ausgeführt. Fehler
Stack trace:
Error: $apply already in progress
at Error (<anonymous>)
at beginPhase (file:///android_asset/www/built.min.js:7:22740)
at Object.Scope.$apply (file:///android_asset/www/built.min.js:7:25967)
at navigator.geolocation.getCurrentPosition.that (file:///android_asset/www/built.min.js:13:8670)
at Object.geolocation.getCurrentPosition (file:///android_asset/www/plugins/org.apache.cordova.core.geolocation/www/geolocation.js:122:13)
at Object.getCurrentPosition (file:///android_asset/www/built.min.js:13:8589)
at Object.getCurrentPosition (file:///android_asset/www/built.min.js:13:8277)
at Object.getCurrentCity (file:///android_asset/www/built.min.js:13:8941)
at Object.$scope.locateDevice (file:///android_asset/www/built.min.js:13:10480)
at file:///android_asset/www/built.min.js:7:12292:7
bezieht sich auf diesen code http://pastebin.com/B9V6yvFu
getCurrentPosition: cordovaReady(function (onSuccess, onError, options) {
navigator.geolocation.getCurrentPosition(function () {
var that = this,
args = arguments;
if (onSuccess) {
$rootScope.$apply(function () {
onSuccess.apply(that, args);
});
}
}, function () {
var that = this,
args = arguments;
if (onError) {
$rootScope.$apply(function () {
onError.apply(that, args);
});
}
}, {
enableHighAccuracy: true,
timeout: 20000,
maximumAge: 18000000
});
})
Seltsame Sache, auf meinem LG4X funktioniert es einwandfrei, doch auf meinem samsung s2 wirft es den oben genannten Fehler. Irgendwelche Ideen, was falsch?
InformationsquelleAutor der Frage Lost in OWL | 2013-09-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie diese Fehlermeldung bekommen, weil Sie anrufen
$apply
innerhalb eines vorhandenen Verdauung Zyklus.Die große Frage ist: warum fordern Sie
$apply
? Sie sollten nicht immer anrufen müssen$apply
es sei denn, Sie sind Schnittstellen von nicht-Winkel-event. Die Existenz von$apply
in der Regel bedeutet, ich mache etwas falsch (es sei denn, wieder, die $anwenden, passiert aus einem nicht-Winkel-Ereignis).Wenn
$apply
wirklich angemessen ist hier, sollten Sie erwägen, ein "sicher anwenden" - Ansatz:https://coderwall.com/p/ngisma
InformationsquelleAutor der Antwort Brian Genisio
Verwenden Sie einfach $evalAsync statt
$apply
.InformationsquelleAutor der Antwort Adrian Neatu
Können Sie verwenden Sie diese Anweisung:
InformationsquelleAutor der Antwort Dariraze
Wenn Umfang angewendet werden müssen, in einigen Fällen, können Sie ein timeout, so dass die $apply wird verzögert, bis der nächste tick
oder wickeln Sie Ihren code in einem $timeout(function(){ .. }); weil es automatisch $anwenden der Umfang am Ende der Ausführung. Wenn Sie brauchen, Ihre Funktion Verhalten sich synchron wäre, würde ich die erste.
InformationsquelleAutor der Antwort jeff.d
In eckigen 1.3, ich denke, Sie wurde eine neue Funktion Hinzugefügt -
$scope.$applyAsync()
. Diese Funktion ruft später anwenden auf - Sie sagen etwa 10 ms später zumindest. Es ist nicht perfekt, aber es ist zumindest die Beseitigung der lästigen Fehler.https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$applyAsync
InformationsquelleAutor der Antwort user3413723
In meinem Fall nutze ich
$apply
mit Winkel-Kalender UI link einige event:Nach dem Lesen der doc das problem: https://docs.angularjs.org/error/$rootScope/inprog
Teil Inkonsistent API (Sync/Async) ist sehr interessant:
Ich den code ändern zu :
Funktioniert wie ein Charme !
InformationsquelleAutor der Antwort mpgn
An jedem beliebigen Punkt in der Zeit, kann es nur eine
$digest
oder$apply
operation in progress. Dies soll verhindern, dass sehr schwer zu erkennen, bugs aus der Eingabe Ihrer Anwendung. Der stack-trace dieser Fehler ermöglicht es Ihnen zu verfolgen die Herkunft der aktuell ausgeführten$apply
oder$digest
nennen, die den Fehler verursacht hat.Mehr info:
https://docs.angularjs.org/error/$rootScope/inprog?p0=$gelten
InformationsquelleAutor der Antwort forgottofly
Nur dieses Problem behoben. Seinen dokumentiert hier.
Ich rief
$rootScope.$apply
zweimal in den gleichen Fluss. Ich habe gewickelt ist, der Inhalt der service-Funktion mit einemsetTimeout(func, 1)
.InformationsquelleAutor der Antwort
Ich weiß, es ist eine alte Frage, aber wenn Sie wirklich brauchen, Verwendung von $scope.$applyAsync();
InformationsquelleAutor der Antwort akaco
Rufe ich $scope.$anwenden, wie dies ignoriert, rufen mehrere in einem mal.
rufen Sie einfach
InformationsquelleAutor der Antwort Marosdee Uma