Angularjs 是否可以在所有http调用之前检查条件?
是否可以检查:Angularjs 是否可以在所有http调用之前检查条件?,angularjs,angular-http,Angularjs,Angular Http,是否可以检查:$rootScope.variable是否为TRUE 在调用所有$http调用之前,还是我应该检查每个调用?我的一些调用是通过angular工厂调用的,而有些则不是 我想也许有一种类似于httpInterceptor的方法,可以在运行某个调用之前进行检查 任何帮助都将不胜感激。您可以为此问题创建一个类似于以下内容的解决方案: angular.module('myModule', []).config(function($httpProvider) { $httpProvi
$rootScope.variable是否为TRUE
在调用所有$http
调用之前,还是我应该检查每个调用?我的一些调用是通过angular工厂调用的,而有些则不是
我想也许有一种类似于httpInterceptor的方法,可以在运行某个调用之前进行检查
任何帮助都将不胜感激。您可以为此问题创建一个类似于以下内容的解决方案:
angular.module('myModule', []).config(function($httpProvider) {
$httpProvider.interceptors.push(function($rootScope) {
return {
'request': function(config) {
if($rootScope.yourVariable) {
// cancel this request
}
}
}
});
})
这个拦截器处理每个请求。您可以找到一个用于取消请求的实现您可以为此问题创建一个类似以下的解决方案:
angular.module('myModule', []).config(function($httpProvider) {
$httpProvider.interceptors.push(function($rootScope) {
return {
'request': function(config) {
if($rootScope.yourVariable) {
// cancel this request
}
}
}
});
})
这个拦截器处理每个请求。您可以找到一个用于取消请求的实现,以进一步了解@boindil的答案。我倾向于这样:
angular.module('someModule', [])
.factory('httpInterceptorService', ['$q', httpInterceptorService])
.config(['$httpProvider', interceptorConfig]);
function httpInterceptorService($q) {
var service = {
request: request,
responseError: responseError
};
return service;
function request(config) {
// do some logic
return config;
}
function responseError(rejection) {
if (rejection.status === 401) {
// they were unauthorised.
}
return $q.reject(rejection);
}
}
function interceptorConfig ($httpProvider) {
$httpProvider.interceptors.push('httpInterceptorService');
}
在这里,它更为独立。您可以看到如何轻松地将更多拦截器推入管道。显然,您可以像$rootScope
一样将任何您喜欢的内容注入到httpInterceptorService
中
注意不要创建任何循环依赖项
我喜欢@pankajparkar评论的内容,维护一个适当的调用堆栈
您可以这样做,而不是使用拦截器(因为它们适用于每个请求)
进一步说明@Boindil的答案。我倾向于这样:
angular.module('someModule', [])
.factory('httpInterceptorService', ['$q', httpInterceptorService])
.config(['$httpProvider', interceptorConfig]);
function httpInterceptorService($q) {
var service = {
request: request,
responseError: responseError
};
return service;
function request(config) {
// do some logic
return config;
}
function responseError(rejection) {
if (rejection.status === 401) {
// they were unauthorised.
}
return $q.reject(rejection);
}
}
function interceptorConfig ($httpProvider) {
$httpProvider.interceptors.push('httpInterceptorService');
}
在这里,它更为独立。您可以看到如何轻松地将更多拦截器推入管道。显然,您可以像$rootScope
一样将任何您喜欢的内容注入到httpInterceptorService
中
注意不要创建任何循环依赖项
我喜欢@pankajparkar评论的内容,维护一个适当的调用堆栈
您可以这样做,而不是使用拦截器(因为它们适用于每个请求)
您应该使用promise chain使用.then()
来维护适当的调用堆栈,通过一个接一个地调用“我的一些调用是通过angular factory调用的,而另一些不是。”那么,为什么不创建一个执行此检查的工厂,然后始终使用它呢?这将清楚地传达正在发生的事情,而不是在httpInterceptor中发生意外。我认为可能有类似httpInterceptor的方式:好主意。你为什么不阅读他们的文档并尝试一些东西呢?你应该使用promise chain using.then()
来维护正确的调用堆栈,方法是一个接一个地调用“我的一些调用是通过angular factory调用的,而另一些则不是。”那么,为什么不创建一个进行此检查的工厂,然后一直使用它呢?这将清楚地传达正在发生的事情,而不是在httpInterceptor中发生意外。我认为可能有类似httpInterceptor的方式:好主意。为什么不阅读他们的文档并尝试一下呢?是的,这绝对是一个更干净的实现,我不会直接在生产中使用我的代码。然而,我只是想把firstChild
引向正确的方向,并给出了文档链接,在那里人们可以找到一个更干净的实现。@boindil是的,这很公平:)@pankajparkar是我回答的第二部分,你在想什么?在我们的生产应用程序中,我们有一个Api服务包装所有$http调用,它与身份验证服务中的拦截器进行检查,以查看本地$cookieStore中是否有身份验证令牌,如果有,则在进行调用之前将其注入头中。$http调用上的服务包装器非常有用。@DanielNalbach您不只是让拦截器来做这件事吗?或者你是说你用自己的服务层来包装http服务,但也有一个拦截器,这绝对是一个更干净的实现,我不会直接在生产中使用我的代码。然而,我只是想把firstChild
引向正确的方向,并给出了文档链接,在那里人们可以找到一个更干净的实现。@boindil是的,这很公平:)@pankajparkar是我回答的第二部分,你在想什么?在我们的生产应用程序中,我们有一个Api服务包装所有$http调用,它与身份验证服务中的拦截器进行检查,以查看本地$cookieStore中是否有身份验证令牌,如果有,则在进行调用之前将其注入头中。$http调用上的服务包装器非常有用。@DanielNalbach您不只是让拦截器来做这件事吗?或者,您是说您使用自己的服务层包装http服务,但也有一个拦截器