我正在努力实现的目标
如果$ http请求返回401错误,我想过渡到某个状态(登录)。因此,我创建了一个$ http拦截器。
问题
当我试图将’$ state’插入拦截器时,我得到了循环依赖。为什么以及如何解决?
码
//Inside Config function
var interceptor = ['$location', '$q', '$state', function($location, $q, $state) {
function success(response) {
return response;
}
function error(response) {
if(response.status === 401) {
$state.transitionTo('public.login');
return $q.reject(response);
}
else {
return $q.reject(response);
}
}
return function(promise) {
return promise.then(success, error);
}
}];
$httpProvider.responseInterceptors.push(interceptor);
使用$injector
服务获取对服务的引用$state
。
var interceptor = ['$location', '$q', '$injector', function($location, $q, $injector) {
function success(response) {
return response;
}
function error(response) {
if(response.status === 401) {
$injector.get('$state').transitionTo('public.login');
return $q.reject(response);
}
else {
return $q.reject(response);
}
}
return function(promise) {
return promise.then(success, error);
}
}];
$httpProvider.responseInterceptors.push(interceptor);
angular-ui-router将$http
服务作为依赖项注入$TemplateFactory
,然后在分派拦截器时在其$http
内部创建对$httpProvider
自身的循环引用。
如果您尝试将$http
服务直接注入拦截器中,则将抛出相同的循环依赖异常。
var interceptor = ['$location', '$q', '$http', function($location, $q, $http) {
循环依赖项异常可能表明您的应用程序中存在混合的关注点,这可能会导致稳定性问题。如果发现自己有这种例外情况,则应该花些时间查看自己的体系结构,以确保避免最终导致引用自己的任何依赖项。
我同意以下答案,即使$injector
用来直接获得所需服务的引用不是理想的选择,可以将其视为反模式。
发出事件是一种更为优雅且脱钩的解决方案。
问题内容: 我正在尝试为AngularJS应用编写HTTP拦截器以处理身份验证。 这段代码有效,但是我担心手动注入服务,因为我认为Angular应该自动处理此问题: 我刚开始做的事情,但是遇到了循环依赖问题: 我担心的另一个原因是Angular Docs中$ http上 的部分似乎显示了一种将依赖项注入“常规方式”到Http拦截器中的方法。请参阅“拦截器”下的代码段: 上面的代码应该放在哪里? 我
问题内容: 当我尝试将$ http注入到覆盖的工厂中时,出现错误: 未捕获的错误:[$ injector:cdep]找到循环依赖项:$ http <-$ exceptionHandler <-$ rootScope 任何想法如何解决?如果我使用[]注入,则$ http是未定义的 编辑 ___ _ ___ ___ _ 根据下面的答案,我尝试了: 但我仍然收到循环错误: 未捕获的错误:[$ injec
我们正在构建一个应用程序,我们需要将实体更新登录到历史表中。我试图通过Hibernate拦截器来实现这一点,我们可以设法获得所有的更改,但很难将它们插入审计表。 我的JPA配置 我的拦截器 } 在方法afterTransactionCompletion中,我需要将所有审计实体写入DB,Autowire不工作,因为这不是spring管理的bean,是否有任何方法可以在此方法中获取DB会话,以便我可以
问题内容: 我正在使用一个已定义的拦截器,我想从拦截器中通过DAO层进行db调用,所以我如何将Spring bean注入到struts拦截器中。是否可以将spring bean注入到struts拦截器中,任何人都可以提出任何想法在此。 问题答案: 编辑 由于不需要将拦截器声明为Spring bean,因此删除了不必要的部分。感谢@AleksandrM对其进行测试。 就像使用Actions一样,(如
我对react钩子和效果有点陌生,在使用useEffect时遇到了问题 上面的代码是我构建的useEffect,用于使用axios获取数据库中的所有数据,并且我将所有数据放在一个称为reports的状态中。 但是当我console.log报告时,它会导致无限循环。我不知道为什么? 让我给你看一个我做的简单动作。 我正在做一个按钮,当它被点击时,报告的状态(按id)将被更新。 这是该州报告结构的样本
问题内容: 假设我具有以下目录结构: 在软件包的中,将导入软件包。但是进口。 程序失败,表示尝试导入b时不存在。(它实际上不存在,因为我们正在导入它。)`c_file.pya.b.d `如何解决这个问题? 问题答案: 如果a取决于c,而c取决于a,那么它们实际上不是同一单位吗? 您应该真正检查一下为什么将a和c拆分为两个包,因为您应该将一些代码拆分为另一个包(以使它们都依赖于该新包,而不是彼此依赖