我对角度(和编程)不熟悉,这是一个看似简单的问题,但我无法弄清楚。
一些教程建议使用$httpProvider.interceptors.push('interceptorName')
操纵http请求和响应。
我想知道更多关于拦截的事情,所以我看的正式文件,但我找不到,只有一个方法(useApplyAsync([值]);)与拦截任何东西,在一个属性(默认)$httpProvider
(文档)。
我从其他教程中知道拦截器是常规服务工厂,并且知道如何使用它,但是我的问题是:由于语法是$httpProvider.interceptors.push('interceptorName')
,所以我希望在中找到一个名为“
interceptors”的属性$httpProvider
,但实际上我可以没错 我想错过这个东西吗?还是我的概念从头开始是完全错误的?
这是一个如何写一个例子。
.config([
'$httpProvider',
function($httpProvider) {
var interceptor = [
'$q',
'$rootScope',
'userSession',
function($q, $rootScope, userSession) {
var service = {
// run this function before making requests
'request': function(config) {
if (config.method === 'GET' || userSession.isAuth()) {
// the request looks good, so return the config
return config;
}
// bad request, so reject
return $q.reject(config);
}
};
return service;
}
];
$httpProvider.interceptors.push(interceptor);
}
])
$httpProvider
文档页面上没有关于拦截器的任何信息,是因为开发人员未在 $http
生成文档的
脚本中
包含以下代码:
/**
* @ngdoc property
* @name $httpProvider#interceptors
* @description
// etc
一般而言,已知文档不完整,不准确和/或令人困惑。直到最近,我一直以为找不到或不了解某些东西是我的问题,但是我发现这通常是因为文档太糟糕了。但是,我们都应该感谢我们拥有如此出色的工具,并且要记住,由于时间必须集中在编写工具而不是工具手册上,因此文档可能不多。
最可靠的“文档”是源代码本身,尽管阅读起来可能不太友好!在我上面链接的源代码中,您可以看到this.interceptors =
[]
。this
引用$httpProvider
,因此它将属性分配interceptors
给$httpProvider
,其值为一个空数组。要添加拦截器,您只需push()
将拦截器添加到此数组即可。