2013-06-06 5 views
9

Sto chiamando da 4 a 10 $ http per ricevere chiamate in parallelo. Ma dopo l'azione di ricerca dell'utente ho bisogno di visualizzare la stessa vista ma con risultati diversi. Compongo set di dati e nuove chiamate di query $ http. Ma le precedenti invocazioni $ http (promesse) sono ancora in fase di compilazione o in azione, con effetto su $ scope.

La mia soluzione possibile è sporca ..

Utilizzando multi-app (multimodulo) pagina che può avere regioni dinamiche controllate da un'applicazione dinamica. Sugli eventi utente rimuovere l'elemento che corrisponde all'evento. Esempio, risultato della ricerca, se voglio visualizzare i risultati da diverse fonti usando diverse chiamate $ http. Se l'utente esegue una ricerca con una nuova parola chiave, rimuoverò l'elemento ng-app di risultato e il nuovo elemento bootstrap.

risposta

26

Si dovrebbe utilizzare la versione 1.1.5, che ha la capacità di annullare le richieste di $ http:

https://github.com/angular/angular.js/blob/master/CHANGELOG.md

// set up a dummy canceler 
var canceler = $q.defer(); 

// use it as a timeout canceler for the request 
$http({method: 'GET', url: '/some', timeout: canceler.promise}).success(
    function (data) { alert("this won't be displayed on cancel"); } 
).error(
    function (data) { alert("this will be displayed on cancel"); } 
) 

// now, cancel it (before it may come back with data) 
$rootScope.$apply(function() { 
    canceler.resolve(); 
}); 

è possibile utilizzare lo stesso cancellatore per tutte le richieste, e risolverlo appena prima iniziando il nuovo set.

+1

Questo è esattamente quello che sto cercando. Grazie per il tuo aggiornamento. –

+0

Anche io: il collegamento per 1.1.5 CHANGELOG è https://github.com/angular/angular.js/commit/5cc9837d931dfb2d374bef24688888e0c52c75d1 – Phantomwhale

+0

Esiste uno schema riutilizzabile per questo? Vorrei annullare l'elaborazione che si verifica dopo che anche il risultato è stato recuperato. – user239558