myHttpInterceptor Factory导致“找到循环依赖项:factory1< - $ http< - factory2”

时间:2014-01-13 11:00:20

标签: javascript angularjs

我有两个工厂: auth_service.js user_service.js

我正在努力实现的目标:

user_service.js

它将像会话管理器一样,它将存储用户数据信息,以便在整个应用程序中可用。此外,当应用程序第一次运行时,它会向服务器发出ajax请求以检查是否有已登录的用户,尽管我认为应用程序仅在索引页面上执行此操作。 (这将是另一个问题)

auth_Service.js

这将负责某种用户操作封装,如登录,注销和isLoggedIn

以下是带有plunker

的插件

虽然在这个傻瓜我只得到

Circular dependency found: $http <- UserService

在我的应用程序中,这就是我得到的:

Circular dependency found: UserService <- $http <- AuthenticationService

问题出在我的拦截器上,因为我正在拦截401并且我注入UserService以注销用户,如果是401

1 个答案:

答案 0 :(得分:2)

首先,不推荐使用responseInterceptors。我强烈建议您使用interceptors。它们甚至更容易使用,imho。

你的假设是正确的。克服这个问题的一种可能方法是使用事件。

在您的拦截器中,您注入$rootScope而不是UserService。然后,不是调用服务的方法,而是发出一个事件,例如$rootScope.emit('unsetUser')

在您的UserService中,您会听到该事件:$rootScope.on('unsetUser', function() {

这样$http服务不知道UserService,但他们仍然可以沟通。

另一种解决方案是创建某种中间服务,并在两者中注入。 UserService然后将自己注册为观察者,拦截器可以调用一个方法,该方法反过来通知UserService