2013-10-24 79 views
22

我試圖實現一個非常標準的任務:當發生異常時,重定向到我的/error頁面。

在一種簡化形式的代碼如下所示:

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

然而,AngularJS抱怨: 循環依賴發現:$位置< - $ exceptionHandler的< - $ rootScope

這看起來像一個基本的限制,在處理異常時不允許使用$location

但是我們該怎麼做呢?

+0

按照[文檔](http://code.angularjs.org/1.2.0-rc .3/docs/api/ng。$ location),'$ location'的唯一依賴關係是'$ browser','$ sniffer'和'$ rootElement'。我不明白爲什麼這段代碼會拋出這個錯誤...對不起,我沒有太大的幫助。必須有一些不在文檔中的隱藏依賴項... – tennisgent

回答

44

要解決這個問題,你需要手動調用$injector解決的依賴性在運行時:

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

    var $location; 

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

非常感謝,這確實奏效! –