2014-11-25 6 views
8

Ho una webapp con più controller. Sto impostando le intestazioni predefinite del servizio $http in un callback in uno dei miei controller (tramite http.defaults.headers.common['headername']). Tuttavia, tali intestazioni non vengono impostate nelle chiamate successive da altri controller. Devo impostarli per ciascun controller che ho o è sufficiente una volta?

+0

Hai provato a usare una risorsa $ ?, è abbastanza strano quello che lei ha citato, dove stai impostando questa intestazione comune, mentre bootstrap l'applicazione? –

+0

Stavo cercando di utilizzare il servizio $ http perché ho solo bisogno di effettuare una chiamata, non ho bisogno del servizio completo di risorse $. Non sto impostando l'intestazione durante il bootstrap dell'app: recupero il valore dell'intestazione da un altro server e poi lo imposto, ma l'applicazione è già iniziata. –

+0

Hai ragione, usando una risorsa $ funziona come sto cercando di farlo. Tuttavia non so perché il servizio $ http non funziona? –

risposta

12

Si consiglia di utilizzare uno dei due metodi:

Set $ ​​http.defaults.headers nel blocco run per esempio

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

Usa intercettore

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

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

Non riesco a impostare l'intestazione nel blocco di esecuzione o di configurazione, il valore non è ancora disponibile in quel punto. –

+1

Hm, l'intercettatore funziona nel momento in cui il codice effettua una richiesta. Quindi tutte le informazioni sono conosciute in quel momento. È possibile passare il valore tramite il servizio. Btw lavorare con le intestazioni tramite controller non è una buona idea. I controller devono essere sottili e qualsiasi logica aziendale e API deve essere inserita nei servizi. –

+0

Significa che potrei iniettare un servizio nell'intercettore che imposterà il valore dell'intestazione solo se il valore era disponibile e che funzionerebbe durante il runtime? Per qualche ragione ho pensato che tutta l'inizializzazione in un blocco di configurazione fosse "statica", ma proverò con questo approccio. –