Qui il modo di ottenere oggetto XHR:
http://boylesoftware.com/blog/angular-tip-using-the-xmlhttprequest-object/
Copia/Incolla:
Normalmente, un AngularJS l'applicazione utilizza il servizio $ http ce per effettuare chiamate ai servizi di back-end. A volte, tuttavia, vorremmo avere l'accesso all'oggetto XMLHttpRequest sottostante. Posso inventare uno pochi casi d'uso, ma quello più importante è probabilmente quello di poter fare il progresso di una richiesta lunga, come un caricamento di file, nel formato . Per fare ciò, abbiamo bisogno di registrare un listener di eventi sull'oggetto XMLHttpRequest per l'evento "in corso". Sorprendentemente, il servizio $ http di Angular non espone in alcun modo l'oggetto XMLHttpRequest sottostante . Quindi, dobbiamo diventare creativi. Ecco un modo per farlo ...
L'oggetto config del servizio $ http ci consente di aggiungere intestazioni alla richiesta HTTP tramite la sua proprietà "intestazioni". Ciò significa che ad un certo punto $ http deve impostare tali intestazioni sull'oggetto XMLHttpRequest che utilizza. Il modo per farlo è utilizzare il metodo setRequestHeader di XMLHttpRequest. Quindi l'idea è di ignorare il metodo setRequestHeader sul prototipo XMLHttpRequest e utilizzare un nome di intestazione speciale per introdurre un hook. Cominciamo con questo e creare un semplice modulo angolare che esegue il metodo di sostituzione nella sua fase di configurazione:
angular.module("bsworksXHR", []).config([
function() {
XMLHttpRequest.prototype.setRequestHeader = (function(sup) {
return function(header, value) {
if ((header === "__XHR__") && angular.isFunction(value))
value(this);
else
sup.apply(this, arguments);
};
})(XMLHttpRequest.prototype.setRequestHeader);
}
]);
Ora, quando facciamo una chiamata $ servizio HTTP, siamo in grado di aggiungere un'intestazione chiamato "XHR" con un valore di funzione che riceverà l'oggetto XMLHttpRequest come unico argomento. Ad esempio, da qualche altra parte nel applicazione:
$http({
…
headers: {
…
__XHR__: function() {
return function(xhr) {
xhr.upload.addEventListener("progress", function(event) {
console.log("uploaded " + ((event.loaded/event.total) * 100) + "%");
});
};
},
…
},
…
}).success(…);
Si spera, le versioni future di AngularJS comprenderà qualche modo ufficiale per accedere all'oggetto XMLHttpRequest di basso livello, anche se limitata, come ad come essere in grado di registrare gli ascoltatori di eventi o di tradurre gli eventi XMLHttpRequest in eventi angolari. Fino ad allora, sto usando l'approccio qui sopra nelle mie app.
Pls si riferisce: http: //stackoverflow.com/questions/15033195/showing-spinner-gif-during-http-request-in-angular –
che aiuta davvero in un modo diverso, grazie – aldrich