2015-08-07 26 views
7

Routing in eckigen App, die in ios8 funktionierte, erzeugt einen Fehler [$ rootScope: infdig] in ios9. Ich habe sowohl ngRoute und ui.router versucht, aber das Ergebnis ist das gleiche.

Error: [$rootScope:infdig] http://errors.angularjs.org/1.4.3/$rootScope/infdig?p0=10&p1=%5B%5D 

Irgendeine Lösung zu diesem?

+1

Dieser Link gefunden offen Radar [https://openradar.appspot.com/22186109](https://openradar.appspot.com/22186109), so scheint es noch nicht eine Lösung zu sein. –

+2

Ein weiterer Link zum Thema angular github [https://github.com/angular/angular.js/issues/12241](https://github.com/angular/angular.js/issues/12241) wieder keine Lösung als noch. –

Antwort

6

Obwohl dies als ein Duplikat dieser Frage markiert ist. Dies ist der beste Weg, um dieses Problem zu lösen.

ionic app iOS 9 problems [$rootScope:infdig] 10 $digest() iterations reached

Die gewählte Antwort in diesem Beitrag führt Sie zu diesem Plugin über die die iOS9 alle Probleme mit Winkel Patches. https://gist.github.com/IgorMinar/863acd413e3925bf282c

Dieser Patch funktioniert für Angular 1.2.0 – 1.4.5 und alle neueren Versionen von Winkel wird dieses Update eingebettet haben.

1

Diese Antwort von Clever Coder auf angular issue 12241 basierend auf Angular v1.4.3

diff --git a/src/ng/browser.js b/src/ng/browser.js 
index 928de95..3b9957e 100644 
--- a/src/ng/browser.js 
+++ b/src/ng/browser.js 
@@ -87,7 +87,9 @@ function Browser(window, document, $log, $sniffer) { 
    var cachedState, lastHistoryState, 
     lastBrowserUrl = location.href, 
     baseElement = document.find('base'), 
-  reloadLocation = null; 
+  reloadLocation = null, 
+  pendingHref = null, 
+  pendingHrefTimer = null; 

    cacheState(); 
    lastHistoryState = cachedState; 
@@ -124,6 +126,18 @@ function Browser(window, document, $log, $sniffer) { 
    if (location !== window.location) location = window.location; 
    if (history !== window.history) history = window.history; 

+ // Schedule cleaning up pendingHref on the next run loop for setting URL. This is to handle 
+ // the case where the browser doesn't update the location.* properties immediately 
+ if (!pendingHrefTimer && pendingHref && url) { 
+  pendingHrefTimer = setTimeout(function() { 
+  if (location.href == pendingHref) { 
+   console.log('Actual href updated... setting pendingHref to null from setTimeout'); 
+   pendingHref = null; 
+  } 
+  pendingHrefTimer = null; 
+  }, 0); 
+ } 
+ 
    // setter 
    if (url) { 
     var sameState = lastHistoryState === state; 
@@ -147,6 +161,7 @@ function Browser(window, document, $log, $sniffer) { 
     // Do the assignment again so that those two variables are referentially identical. 
     lastHistoryState = cachedState; 
     } else { 
+  pendingHref = url; 
     if (!sameBase || reloadLocation) { 
      reloadLocation = url; 
     } 
@@ -161,10 +176,22 @@ function Browser(window, document, $log, $sniffer) { 
     return self; 
    // getter 
    } else { 
+  var href = location.href.replace(/%27/g, "'"); 
+  if (pendingHref) { 
+  //console.log('.. using pendingHref for url() return value'); 
+  href = pendingHref; 
+  } 
+ 
+  if (location.href == pendingHref) { 
+  console.log('Actual href updated... setting pendingHref to null in getter'); 
+  pendingHref = null; 
+  } 
+ 
+  //var href = location.href.replace(/%27/g,"'"); 
     // - reloadLocation is needed as browsers don't allow to read out 
     // the new location.href if a reload happened. 
     // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172 
-  return reloadLocation || location.href.replace(/%27/g,"'"); 
+  return reloadLocation || href; 
    } 
    }; 

löst anscheinend das Problem, aber nicht in anderen Versionen von Angular.

Verwandte Themen