エラー: $digest はすでに進行中です 質問する

エラー: $digest はすでに進行中です 質問する

電話をかけるときにこのエラーが発生します

        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'];

エラーは

Error: $digest already in progress

ベストアンサー1

重複:$scope.$apply() を呼び出すときにエラー $digest がすでに進行中になるのを防ぎます。

発生したエラーは、Angular のダーティ チェックがすでに進行中であることを意味します。

最近のベストプラクティスでは、$timeout次のコードを実行する場合はダイジェスト反復:

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

前回の回答:このアプローチは使わない

次のように安全な適用を使用します。

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

条件を逆にしてみませんか?

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

おすすめ記事