2014-10-03 21 views
14

Tôi mới đến góc cạnh (và lập trình), đây là một câu hỏi dường như đơn giản nhưng tôi không thể hiểu được.

một số hướng dẫn đề xuất sử dụng $httpProvider.interceptors.push('interceptorName') để thao tác yêu cầu và phản hồi http.

Tôi muốn biết thêm về công cụ đánh chặn vì vậy tôi nhìn vào tài liệu chính thức, nhưng tôi không thể tìm thấy bất kỳ thứ gì liên quan đến máy đánh chặn, chỉ có một phương thức (useApplyAsync ([value]);)) trong $httpProvider (docs).

Tôi biết từ các hướng dẫn khác rằng máy đánh chặn là nhà máy dịch vụ thông thường và tôi biết cách sử dụng, nhưng câu hỏi của tôi là: vì cú pháp là $httpProvider.interceptors.push('interceptorName'), thì tôi sẽ tìm thấy thuộc tính được gọi là "chặn" trong $httpProvider nhưng thực tế thì tôi không thể. Là cái gì tôi bỏ lỡ để có được sự nhầm lẫn này? hoặc là khái niệm của tôi hoàn toàn sai từ phía dưới?

+0

Dưới đây là thông tin chi tiết về các trình chặn: [Trình chặn trong AngularJS và các ví dụ hữu ích] (http://www.webdeveasy.com/interceptors-in-angularjs-and-useful-examples/). – alecxe

+0

Tôi đã đọc bài viết trước nhưng nó không trả lời câu hỏi của tôi, hãy đọc kỹ câu hỏi của tôi, câu hỏi của tôi có vẻ giống như một quan niệm sai lầm chung hơn là một vấn đề cụ thể liên quan đến đánh chặn, cảm ơn. – webberpuma

+0

Và tôi không cố gắng trả lời - đó là một nhận xét. – alecxe

Trả lời

21

Bộ chặn trong số documentation here.

Dưới đây là ví dụ về cách viết một.

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

    } 
]) 

Lý do không có gì trên trang $httpProvider tài liệu về tên lửa đánh chặn là là bởi vì các nhà phát triển không bao gồm các mã sau trong $http script which the docs are generated from:

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

Tài liệu nói chung được biết đến là không đầy đủ, không chính xác , và/hoặc khó hiểu. Cho đến gần đây, tôi luôn nghĩ rằng tôi là vấn đề khi tôi không thể tìm thấy hoặc hiểu điều gì đó, nhưng tôi thấy rằng nó thường là vì tài liệu chỉ là tệ hại. Tuy nhiên, tất cả chúng ta nên biết ơn rằng chúng ta có những công cụ tuyệt vời như vậy để sử dụng và ghi nhớ rằng có lẽ tài liệu hướng dẫn nghèo nàn vì thời gian phải tập trung vào việc viết công cụ thay vì hướng dẫn sử dụng cho công cụ.

"Tài liệu" đáng tin cậy nhất là mã nguồn, mặc dù nó có thể ít thân thiện hơn nhiều để đọc! Trong mã nguồn tôi đã liên kết ở trên, bạn có thể thấy this.interceptors = []. this dùng để chỉ $httpProvider, do đó, nó được gán thuộc tính interceptors đến $httpProvider với giá trị là một mảng trống. Để thêm máy đánh chặn của bạn, bạn chỉ cần push() trình chặn của bạn vào mảng này.

+0

Cảm ơn câu trả lời, nó xóa một chút nhưng vẫn không thể giải quyết câu hỏi của tôi: nếu cú ​​pháp là $ httpProvider.interceptors.push (...), tại sao không có thuộc tính có tên là interceptor trong tài liệu $ httpProvider? – webberpuma

+0

Câu trả lời cập nhật của tôi có phù hợp với bạn không? Tài liệu thường khó hiểu và không đầy đủ. Thật không may, nhưng điển hình. – m59

+0

Bởi vì tôi là người mới đến với các nhà lãnh đạo (và, thành thực với bạn, tôi mới lập trình), tôi cảm thấy không thoải mái khi có điều gì đó không có trong tài liệu chính thức, tôi nghĩ phải có một số khái niệm cơ bản về lập trình mà tôi không có Tôi hiểu. Dù sao, cảm ơn bạn đã trả lời của bạn, bạn thậm chí chỉ cho tôi mã nguồn (mặc dù tôi không thể hiểu) và cho tôi biết hầu hết các tài liệu hút, giúp rất nhiều. – webberpuma

Các vấn đề liên quan