2014-10-03 8 views
14

Ich bin neu zu eckig (und Programmierung), hier ist eine scheinbar einfache Frage, aber ich konnte es nicht herausfinden.

einige Tutorials schlägt die Verwendung $httpProvider.interceptors.push('interceptorName') vor, um die HTTP-Anfrage und Antwort zu manipulieren.

Ich möchte mehr über die Interceptor-Sache wissen, also schaue ich auf das offizielle Dokument, aber ich konnte nichts im Zusammenhang mit Interceptor finden, gibt es nur eine Methode (useApplyAsync ([Wert]);) und eine Eigenschaft (Standardwerte) in $httpProvider (docs).

Ich weiß aus anderen Tutorials, die ein Abfangjäger eine regelmäßige Fabrik ist und ich weiß, wie es zu benutzen, aber meine Frage ist: Da die Syntax $httpProvider.interceptors.push('interceptorName') ist, dann erwarte ich, dass ich eine Eigenschaft finden „Abfangjäger“ genannt in $httpProvider aber ich kann es nicht. Ist etwas, was ich vermisse, diese Verwirrung zu bekommen? oder ist mein Konzept von unten völlig falsch?

+0

Hier ist eine gute Lektüre über Interzeptoren: [Interzeptoren in AngularJS und nützliche Beispiele] (http://www.webdeveasy.com/interceptors-in-angularjs-and-useful-examples/). – alecxe

+0

Ich habe bereits den Artikel gelesen, aber es beantwortet meine Frage nicht, bitte lesen Sie meine Frage sorgfältig, meine Frage scheint eher ein allgemeines Missverständnis als ein spezifisches Problem in Bezug auf Abfangjäger, danke. – webberpuma

+0

Und ich versuche nicht zu antworten - es ist ein Kommentar. – alecxe

Antwort

21

Interzeptoren sind in der documentation here.

Hier ist ein Beispiel, wie man einen schreibt.

.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); 

    } 
]) 

Der Grund gibt es auf der $httpProvider Dokumentation Seite über Abfangjäger nichts ist, weil die Entwickler nicht den folgenden Code in den $http script which the docs are generated from enthalten sind:

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

Dokumentation allgemein bekannt ist ungenau unvollständig zu sein und/oder verwirrend. Bis vor kurzem dachte ich immer, ich wäre das Problem, wenn ich etwas nicht finden oder verstehen könnte, aber ich habe festgestellt, dass Dokumentation oft nur lausig ist. Wir sollten jedoch alle dankbar sein, dass wir so großartige Werkzeuge haben, um zu verwenden und im Hinterkopf zu behalten, dass die Dokumentation vielleicht schlecht ist, weil sich die Zeit auf das Schreiben des Werkzeugs anstelle des Handbuchs für das Werkzeug konzentrieren musste.

Die zuverlässigste "Dokumentation" ist der Quellcode selbst, obwohl er viel weniger lesefreundlich sein kann! Im oben verlinkten Quellcode sehen Sie this.interceptors = []. this bezieht sich auf die $httpProvider, also weist es die Eigenschaft interceptors$httpProvider zu, wobei der Wert ein leeres Array ist. Um deine Interzeptoren hinzuzufügen, musst du einfach push() deinen Interceptor zu diesem Array hinzufügen.

+0

Danke für die Antwort, es löscht ein bisschen, aber immer noch nicht meine Frage zu lösen: Wenn die Syntax $ httpProvider.interceptors.push (...) ist, Warum gibt es im $ httpProvider-Dokument keine Eigenschaft Interceptor? – webberpuma

+0

Macht meine aktualisierte Antwort Sinn für Sie? Die Dokumentation ist normalerweise schwer zu verstehen und unvollständig. Es ist bedauerlich, aber typisch. – m59

+0

Weil ich neu bei angularjs bin (und, um ehrlich zu sein, bin ich neu im Programmieren), fühle ich mich unwohl, wenn etwas nicht auf dem offiziellen Dokument steht. Ich denke mir, dass es einige grundlegende Konzepte der Programmierung geben muss. ich verstehe nicht. Wie auch immer, danke für deine Antwort, du zeigst mir sogar den Quellcode (obwohl ich das nicht verstehen konnte) und erzähl mir, dass die meiste Dokumentation scheiße ist, das hilft sehr. – webberpuma