2015-02-09 14 views
16

I w zasadzie nazwać get żądań tak:

var resource = $resource('/api/v1/categories/:id') 

resource.get({id: 1}).$promise.then(function(data){ 
    console.log(data) 
}) 

Działa to dobrze .. ale jak mogę nagłówki odpowiedzi?

Odpowiedz

37

Można użyć akcję transformResponse defined here ten pozwoli Ci dodać nagłówki

$resource('/', {}, { 
    get: { 
     method: 'GET', 
     transformResponse: function(data, headers){ 
      response = {} 
      response.data = data; 
      response.headers = headers(); 
      return response; 
     } 
    } 

Zobacz przykład pracuje tu JSFiddle

+1

To dziękuje, dziękuję – Nathan

+0

nie działa z nowszymi wersjami. Funkcja, która przekształca odpowiedź, powinna zwrócić teraz ponownie zserializowane dane. – EvAlex

+0

Po prostu uzyskaj dostęp do funkcji 'headersGetter', która zostanie przekazana jako drugi parametr po danych. Zobacz odpowiedź poniżej lub tutaj: https://docs.angularjs.org/api/ngResource/service/$resource – Sean

15

@ odpowiedź Marcina działa na takich samych wniosków domen. Dlatego chciałbym dodać do jego odpowiedzi, że jeśli używasz żądań między domenami, będziesz musiał dodać kolejny nagłówek z Access-Control-Expose-Headers: X-Blah, X-Bla wraz z nagłówkiem Access-Control-Allow-Origin:*.

gdzie X-Blah i X-Bla są niestandardowymi nagłówkami.

Również nie trzeba używać żądania przekształcenia, aby uzyskać nagłówki. Możesz użyć tego kodu:

var resource = $resource('/api/v1/categories/:id') 

resource.get({id: 1}, function(data, headersFun){ 
    console.log(data, headersFun()); 
}) 

Zobacz this skrzypce. Mam nadzieję, że to pomoże !!!

+0

Myślę, że jest to wygodniejsze niż obecnie akceptowane odpowiedź (przynajmniej w 2016 r.). Angular automatycznie podaje wartości nagłówków za pomocą drugiego parametru (nie zapomnij użyć paranthezy, ponieważ jest to funkcja, a nie obiekt bezpośredni). – beawolf

+0

Nie ma większego znaczenia w międzydomenowej domenie, a bardziej istotna jest funkcja nagłówka, która jest drugim parametrem funkcji "wtedy" - prawie ominąłem to z powodu informacji o wielu domenach! – Sean

+2

Istnieje subtelna, ale niezwykle ważna różnica między tym, co tu napisałeś, a tym, co jest w skrzypcach. Skrzypce używa wywołania 'get' z wywołania zwrotnego dla sukcesu i błędu, w tym przypadku istnieje headersFun. Ale obsługa odpowiedzi za pomocą '$ promise.then' tak jak napisałeś powyżej nie ma takiego drugiego parametru -' headersFun' jest niezdefiniowany. – Danny

4

Stare pytanie, ale myślę, że warto wspomnieć o przyszłym numerze referencyjnym. Istnieje rozwiązanie „urzędowy” za to w kątowym dokumentacji:

Warto zauważyć, że callback sukces GET, zapytania i innych metod zostanie podjęta w odpowiedzi, że przyszedł z serwera, jak również jako $ http nagłówku funkcji getter, więc można było przepisać powyższy przykład i uzyskać dostęp do nagłówków http jak:

var User = $resource('/user/:userId', {userId:'@id'}); 

var users = User.query({}, function(users, responseHeaders){ 
    // ... 
    console.log(responseHeaders('x-app-pagination-current-page')); 
}); 

(kod z docs nieznacznie zaktualizowanej dla jasności)

Dla żądań CORS wymagane jest ujawnienie nagłówków wymienionych w innych odpowiedziach.