2013-10-24 34 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

非常感谢,这确实奏效! –