我有两个工厂: auth_service.js 和 user_service.js
我正在努力实现的目标:
它将像会话管理器一样,它将存储用户数据信息,以便在整个应用程序中可用。此外,当应用程序第一次运行时,它会向服务器发出ajax请求以检查是否有已登录的用户,尽管我认为应用程序仅在索引页面上执行此操作。 (这将是另一个问题)
这将负责某种用户操作封装,如登录,注销和isLoggedIn
以下是带有plunker
的插件虽然在这个傻瓜我只得到
Circular dependency found: $http <- UserService
在我的应用程序中,这就是我得到的:
Circular dependency found: UserService <- $http <- AuthenticationService
问题出在我的拦截器上,因为我正在拦截401并且我注入UserService以注销用户,如果是401
答案 0 :(得分:2)
首先,不推荐使用responseInterceptors
。我强烈建议您使用interceptors
。它们甚至更容易使用,imho。
你的假设是正确的。克服这个问题的一种可能方法是使用事件。
在您的拦截器中,您注入$rootScope
而不是UserService
。然后,不是调用服务的方法,而是发出一个事件,例如$rootScope.emit('unsetUser')
。
在您的UserService
中,您会听到该事件:$rootScope.on('unsetUser', function() {
。
这样$http
服务不知道UserService
,但他们仍然可以沟通。
另一种解决方案是创建某种中间服务,并在两者中注入。 UserService
然后将自己注册为观察者,拦截器可以调用一个方法,该方法反过来通知UserService
。