2014-10-03 99 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