wake-up-neo.com

Fehler: $ digest ist bereits in Bearbeitung

Ich erhalte diese Fehlermeldung, während ich anrufe 

        function MyCtrl1($scope, $location, $rootScope) {
      $scope.$on('$locationChangeStart', function (event, next, current) {
        event.preventDefault();
        var answer = confirm("Are you sure you want to leave this page?");
        if (answer) {
          $location.url($location.url(next).hash());
          $rootScope.$apply();
        }
      });
    }

MyCtrl1.$inject = ['$scope', '$location', '$rootScope'];

Fehler ist

Error: $digest already in progress
29
iJade

Duplicated: Verhindert, dass beim Aufruf von $ scope der Fehler $ digest bereits ausgeführt wird. $ Apply ()

Dieser Fehler bedeutet, dass Angulars Dirty-Check bereits läuft.

Die neuesten Best Practices sagen, dass wir $timeout verwenden sollten, wenn wir Code in der nächsten Digest Iteration ausführen möchten:

$timeout(function() {
  // the code you want to run in the next digest
});

Vorherige Antwort: ( verwende diesen Ansatz nicht )

Verwenden Sie eine sichere Anwendung wie diese:

$rootScope.$$phase || $rootScope.$apply();

Warum kehrst du den Zustand nicht um?

$scope.$on('$locationChangeStart', function (event, next, current) {                
    if (confirm("Are you sure you want to leave this page?")) {
        event.preventDefault();
    }
});
61
bmleite

Für andere, die diesen Fehler beheben möchten, ist zu beachten, dass der Befehl docs die Verwendung des $timeout-Dienstes vorschlägt, um sicherzustellen, dass der Code in einem einzigen $apply-Block aufgerufen wird.

$timeout(function() {
  $scope.someData = someData;
});

Auch in diese Frage wenn Sie über die akzeptierte Antwort schauen.

12
aw04

Benutzen

$scope.evalAsync(function(){ 
});

anstatt

$scope.$apply(function(){
});
2

joslibers Antwort löste ein ähnliches $ Digest-Problem, das ich hatte. Ich habe gerade gebraucht

$scope.$evalAsync(function(){ 
   // code here
});

Guter Artikel hier https://www.bennadel.com/blog/2605-scope-evalasync-vs-timeout-in-angularjs.htm

1
user2217057

Da $ scope. $ Apply () in der Umgebung AngularJs liegt. Im Allgemeinen wird nicht empfohlen, $ apply () zu verwenden. Außerdem wird die Anwendung von $ rootScope. $ Apply () -Funktionen dazu führen, dass die Anwendung langsam ausgeführt wird ein neuer Zyklus Ihres gesamten Umfangs.

0