電話しようとするとこのエラーが発生します
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
重複: $ scope。$ apply()の呼び出し時にエラー$ digestがすでに進行しているのを防ぐ
取得しているエラーは、Angularのダーティチェックが既に進行中であることを意味します。
最新のベストプラクティスでは、$timeout
次のdigest反復でコードを実行する場合:
$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();
}
});
つかいます
$scope.evalAsync(function(){
});
の代わりに
$scope.$apply(function(){
});
josliberの答えは、私が抱えていた同様の$ digest問題を解決しました。使ったばかり
$scope.$evalAsync(function(){
// code here
});
良い記事はこちら https://www.bennadel.com/blog/2605-scope-evalasync-vs-timeout-in-angularjs.htm
$ scope。$ apply()はAngularJs環境内にあるため、一般に$ apply()を使用することはお勧めしませんが、さらに$ rootScope。$ apply()関数を使用すると、アプリケーションの実行が遅くなります。スコープ全体の新しいサイクルを実行します。