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?
risposta
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);
});
Non riesco a impostare l'intestazione nel blocco di esecuzione o di configurazione, il valore non è ancora disponibile in quel punto. –
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. –
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. –
Hai provato a usare una risorsa $ ?, è abbastanza strano quello che lei ha citato, dove stai impostando questa intestazione comune, mentre bootstrap l'applicazione? –
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. –
Hai ragione, usando una risorsa $ funziona come sto cercando di farlo. Tuttavia non so perché il servizio $ http non funziona? –