2013-06-06 11 views
9

Łączę 4 do 10 $ http odbierać połączenia równolegle. Ale po akcji wyszukiwania użytkownika potrzebuję wyświetlić ten sam widok, ale z innym wynikiem. Zapełniam zestaw danych i nowych wywołań zapytań $ http. Jednak poprzednie wywołania $ $ (obietnice) nadal są wypełniane lub w akcji, co skutkuje zasięgiem $.

Moje rozwiązanie jest możliwe brudny ..

Korzystanie z wielu aplikacji (wielomodułowej) stronę, która może mieć dynamicznych regionów kontrolowanych przez dynamiczną aplikacji. W przypadku zdarzeń użytkownika usuń element odpowiadający zdarzeniu. Przykład, wynik wyszukiwania, jeśli chcę wyświetlać wyniki z różnych źródeł przy użyciu różnych wywołań $ http. Jeśli użytkownik wyszukuje nowe słowo kluczowe, usuwam element wynikowy ng-app i ładuję nowy element.

Odpowiedz

26

Należy używać wersji 1.1.5, który ma zdolność do odwołania $ żądań 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(); 
}); 

można używać tego samego Canceller dla wszystkich żądań i rozwiązać go tuż przed rozpoczęcie nowego zestawu.

+1

To jest dokładnie to, czego szukam. Dzięki za Twoje uaktualnienie. –

+0

Ja też - link do wersji 1.1.5 CHANGELOG to https://github.com/angular/angular.js/commit/5cc9837d931dfb2d374bef24688888e0c52c75d1 – Phantomwhale

+0

Czy istnieje wzór wielokrotnego użytku? Chciałbym anulować przetwarzanie, które ma miejsce po pobraniu wyniku. – user239558

Powiązane problemy