2014-10-03 133 views
14

我是新的angular(和编程),这是一个看似简单的问题,但我无法弄清楚。

一些教程建议使用$httpProvider.interceptors.push('interceptorName')来操纵http请求和响应。我想知道更多关于拦截器的东西,所以我看看官方文档,但是我找不到与拦截器相关的任何东西,只有一个方法(useApplyAsync([value]);)和一个属性(默认值)在$httpProviderdocs)中。

我从其他教程,拦截器是一个普通的服务工厂知道,我知道如何使用它,但我的问题是:因为语法是$httpProvider.interceptors.push('interceptorName'),那么我希望我会发现在$httpProvider所谓的“拦截器”的属性,但实际上我做不到。我错过了这个混乱吗?或者是我的概念从底部完全错误?

+0

下面是关于拦截器的一个很好的解读:[AngularJS中的拦截器和有用的示例](http://www.webdeveasy.com/interceptors-in-angularjs-and-useful-examples/)。 – alecxe 2014-10-03 01:21:23

+0

我以前已经阅读过这篇文章,但是它没有回答我的问题,请仔细阅读我的问题,我的问题看起来像是一个普遍的误解,而不是与拦截器相关的特定问题,谢谢。 – webberpuma 2014-10-03 01:25:35

+0

我不想回答 - 这是一条评论。 – alecxe 2014-10-03 01:31:38

回答

21

拦截器在documentation here

下面是如何编写一个示例。

.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 script which the docs are generated from下面的代码:

一般
/** 
    * @ngdoc property 
    * @name $httpProvider#interceptors 
    * @description 
// etc 

文件被称为是不完整,不准确,和/或令人困惑。直到最近,当我找不到或理解某些东西时,我一直认为我是问题,但是我发现它通常是因为文档太糟糕了。但是,我们应该感谢我们拥有如此好用的工具,并且记住,文档可能很差,因为时间必须集中在编写工具而不是该工具的手册上。

最可靠的“文件”是源代码本身,尽管它可能不太友好阅读!在上面链接的源代码中,您可以看到this.interceptors = []this指的是$httpProvider,因此它将属性interceptors指定为$httpProvider,该值为空数组。要添加拦截器,只需将拦截器push()添加到此数组中。

+0

感谢您的答案,它清除了一点,但仍然无法解决我的问题:如果语法是$ httpProvider.interceptors.push(...),为什么$ httpProvider文件中没有名为拦截器的属性? – webberpuma 2014-10-03 02:20:57

+0

我的更新答案是否适合你?文档通常很难理解和不完整。这是不幸的,但典型的。 – m59 2014-10-03 03:04:40

+0

因为我对angularjs是陌生的(对于老实说,我是编程新手),当官方文档中没有东西时,我感到不舒服,我认为对自己必须有一些基本的编程概念,不明白。无论如何,感谢您的回复,您甚至可以向我展示源代码(虽然我无法理解),并告诉我大多数文档很糟糕,这对我有很大的帮助。 – webberpuma 2014-10-03 03:13:55