myHttpInterceptor Factory 导致"Circular dependency found: factory1 <- $http <- factory2"



好吧,我有两个工厂:auth_service.jsuser_service.js

我要完成的:

user_service.js

它将

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

auth_Service.js

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

这是带有的 plunker:plunker

虽然在这个笨蛋中我只得到

Circular dependency found: $http <- UserService

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

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

问题出在我的拦截器上的某个地方,因为我正在拦截 401,并且在 401 的情况下我注入了 UserService 以注销用户

首先responseInterceptors被弃用。我强烈建议使用interceptors。恕我直言,它们甚至更容易使用。

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

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

在你的UserService里,你听那个事件:$rootScope.on('unsetUser', function() {

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

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

相关内容

最新更新