web-dev-qa-db-ja.com

angularjs $ httpProviderインターセプターのドキュメント

私はangular(およびプログラミング)に不慣れです。ここでは一見単純な質問ですが、理解できませんでした。

一部のチュートリアルでは、$httpProvider.interceptors.Push('interceptorName')を使用してhttp要求と応答を操作することを提案しています。

インターセプターについてもっと知りたいので公式ドキュメントを見てみましたが、インターセプターに関連するものは何も見つかりませんでした。メソッド(useApplyAsync([value]);)とプロパティ(デフォルト)だけが_$httpProvider_( docs )。

他のチュートリアルから、インターセプターは通常のサービスファクトリであり、その使用方法は知っていますが、私の質問は、構文が$httpProvider.interceptors.Push('interceptorName')であるため、「インターセプター」と呼ばれるプロパティが見つかることを期待しています_$httpProvider_にありますが、実際にはできません。この混乱を得るために私が逃したものはありますか?それとも、私のコンセプトは下から完全に間違っていますか?

15
webberpuma

インターセプターは ドキュメントはこちら にあります。

これを書く方法の例を示します。

_.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()するだけです。

24
m59