2014-11-25 4 views
8

여러 컨트롤러가있는 webapp가 있습니다. 내 컨트롤러 중 하나의 콜백에 $http 서비스의 기본 헤더를 설정하고 있습니다 (http.defaults.headers.common['headername'] 통해). 그러나이 헤더는 다른 컨트롤러의 후속 호출에서 설정되지 않습니다. 내가 가진 각 컨트롤러에 대해 설정해야합니까, 아니면 한 번 정도입니까?

+0

당신은 당신이 응용 프로그램을 부트 스트랩 동안 곳이 공통 헤더를 설정하고, 언급 된 것을 매우 이상한? 달러 (A $) 리소스를 사용하여 시도? –

+0

전화를해야하기 때문에 $ http 서비스를 사용하려고했지만 전체 $ 리소스 서비스는 필요하지 않습니다. 응용 프로그램을 부트 스트래핑하는 동안 헤더를 설정하지 않습니다. 다른 서버에서 헤더의 값을 검색 한 다음 설정하지만 응용 프로그램이 시작되었습니다. –

+0

네가 맞아, $ 리소스를 사용하여 내가하는 것처럼 작동한다. 그러나 $ http 서비스가 작동하지 않는 이유를 모르겠습니다. –

답변

12

두 가지 방법 중 하나를 사용해야합니다. 실행 블록에 $ http.defaults.headers를 설정하십시오.

module.run(function($http) { 
    $http.defaults.headers.common.Authorization = 'Basic Token'; 
}); 

사용 인터셉터는

var interceptor = function() { 
    return { 
    'request': function(config) { 
     config.headers['Authorization'] = 'Basic Token'; 
    } 
    } 
}; 

angular.module('app', []) 
    .config(function ($httpProvider) { 
    $httpProvider.interceptors.push(interceptor); 
}); 
+1

실행 또는 구성 블록에서 헤더를 설정할 수 없습니다. 그 시점에서 값을 사용할 수 없습니다. –

+1

흠, 인터셉터는 코드가 요청할 때 작동합니다. 따라서 모든 정보는 그 순간에 알려졌습니다. 서비스를 통해 값을 전달할 수 있습니다. Btw 컨트롤러를 통해 머리글 작업은 좋은 생각이 아닙니다. 컨트롤러는 얇고 모든 비즈니스 및 API 로직을 서비스에 배치해야합니다. –

+0

값을 사용할 수있는 경우에만 헤더의 값을 설정하는 서비스를 인터셉터에 삽입 할 수 있으며 이는 런타임 중에 작동 할 수 있습니다. 어떤 이유로 나는 config 블록의 모든 초기화가 "정적"이라고 생각했지만이 방법을 시도 할 것이다. –

관련 문제