我是角度(和编程)的新手,这是一个看似简单的问题,但我无法弄清楚。
一些教程建议使用$httpProvider.interceptors.push('interceptorName')
操纵http请求和响应。
我想了解更多关于拦截器的事情,所以我查看了官方文档,但是我找不到与拦截器相关的任何内容,只有一个方法(useApplyAsync([value]);)和一个属性(默认值)$httpProvider
(docs).
我从其他教程中知道拦截器是一个常规服务工厂,并且我知道如何使用它,但我的问题是:因为语法是$httpProvider.interceptors.push('interceptorName')
,那么我希望我会在其中找到一个名为“拦截器”的属性$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
to $httpProvider
该值为空数组。要添加拦截器,您只需push()
你的拦截器到这个数组。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)