2013-10-24 15 views
22

Ich versuche, eine sehr standardmäßige Aufgabe zu implementieren: Wenn eine Ausnahme auftritt, umleiten Sie meine /error Seite.

In einer vereinfachten Form der Code wie folgt aussieht:

app.factory('$exceptionHandler', ['$location', function($location) { 
    return function(exception, cause) { 
     $location.path("/error"); 
    }; 
}]); 

jedoch AngularJS klagt: Kreisabhängigkeit gefunden: $ location < - $ Exception < - $ rootScope

Das sieht aus wie eine grundsätzliche Einschränkung, die Verwendung von $location bei der Behandlung von Ausnahmen nicht zuzulassen.

Aber wie sonst können wir es dann tun?

+0

Nach den [docs] (http://code.angularjs.org/1.2.0-rc .3/docs/api/ng. $ Location), die einzigen Abhängigkeiten für '$ location' sind' $ browser', '$ sniffer' und' $ rootElement'. Ich sehe nicht, warum dieser Code diesen Fehler werfen würde ... sorry, ich bin nicht viel Hilfe. Es muss eine versteckte Abhängigkeit geben, die nicht in der Dokumentation ist ... – tennisgent

Antwort

44

Um dies zu umgehen Sie die $injector manuell aufrufen müssen die Abhängigkeit zur Laufzeit zu beheben:

app.factory('$exceptionHandler', ['$injector', function($injector) { 

    var $location; 

    return function(exception, cause) { 
     $location = $location || $injector.get('$location'); 
     $location.path("/error"); 
    }; 
}]); 
+0

Vielen Dank, das hat funktioniert! –