2015-02-01 4 views
2

Angular.js $ http 인터셉터가 전체 애플리케이션에서 공유되는지 궁금합니다.
많은 앱간에 공유되는 myDependentApp 모듈이 있다고 가정 해 보겠습니다. 이 모듈에는 $ http 요청/응답을 제어하도록 구성된 인터셉터가 있습니다.

<html ng-app="myApp"> 

myApp에서 활성화 될 것 myDependentApp의 인터셉터 위치 : 나는 응용 프로그램 부트 스트랩에 선언하여 해당 모듈을 포함한다 :

angular.module('myApp', ['myDependentApp']); 

을 그리고 응용 프로그램 템플릿을?

도움 주셔서 감사합니다.

+0

어디에서 구성 했습니까? 'myDependentApp'모듈의 config 블록에서 구성한 경우 myApp에서 활성화됩니다. – pixelbits

+0

네 말이 맞아, 내 포스트는 꽤 불분명하다. 나는 그것을 고쳐 줄 것이다. $ httpInterceptors가 모듈 외부에서 사용 가능하다는 것은 궁금했습니다. 인터셉터는 모듈의 범위에서만 활성화되는 것이 두려웠지만 상위 모듈에서도 사용할 수 있다고 말하면 정말 좋습니다 :) 감사합니다! –

답변

5

대답은 '예, 난 여기가 시도됩니다. 여기에 바이올린이 있습니다 : http://jsfiddle.net/6dbgo6pt/1/

+0

이 코드는 작동하지 않습니다. 요청 인터셉터에서'return config'을 추가하여 제대로 작동하게해야합니다. –

0

$http Interceptors :

글로벌 오류 처리, 인증, 또는 요청 또는 응답의 후 처리의 동기 또는 비동기 전처리의 어떠한 목적

이전 요청을 가로 챌 수있는 것이 바람직하다 이러한 요청을 시작한 응용 프로그램 코드로 전달되기 전에 서버와 응답에 전달됩니다. 인터셉터는 약속 API를 활용하여 동기 및 비동기 전처리에 대한 필요성을 충족시킵니다.

인터셉터는 $ httpProvider에 $ httpProvider.interceptors 배열에 추가하여 등록 된 서비스 팩토리입니다. 팩토리는 호출되고 의존성 (지정된 경우)이 삽입되어 인터셉터를 리턴합니다.

$httpProvider

:

사용 $ httpProvider는 $ HTTP 서비스의 기본 동작을 변경합니다.

var dependentApp = angular.module('dependency',[]).config(['$httpProvider', function($httpProvider) { 
    $httpProvider.interceptors.push(function ($q) { 
     return { 
      'request': function (config) { 
       console.log('request intercept'); 
      }, 

       'response': function (response) { 
       console.log('response intercept'); 
      } 
     }; 
    }); 
}]); 

var app = angular.module('myapp', ['dependency']); 
app.controller('mycontroller', ['$scope', '$http', function ($scope, $http) { 
    $http.get('http://www.google.com'); 
}]); 

을 그리고 요청이 차단되는 것을 보았다 :

1

대답은 예입니다. docs

각도 서비스에서 직접

은 다음과 같습니다

, 지연 인스턴스화

- 응용 프로그램 구성 요소가에 따라 달라 때 각도는 서비스를 인스턴스화합니다.

싱글 톤 - 서비스에 종속적 인 각 구성 요소는 서비스 팩토리가 생성 한 단일 인스턴스에 대한 참조를 가져옵니다.

$httpprovider recipe을 사용하는 서비스 생성자 중 하나입니다.

그래서이 앱의 모든 모듈이 바로 그 $http 서비스를 다시 이후 모듈과 공유됩니다 인터셉터를 추가하는 모듈을 제공 할 것을 의미의 $http 서비스는 다른 angular- 또는 사용자 정의 구축 서비스와 같은 싱글이다 .service, .factory 또는 .provider을 사용하십시오.