2014-04-18 10 views
6

Mam następujący API:

{ 
"meta": { 
    "total_item": 1, 
    "number_of_pages": 1, 
    "page_number": 1, 
    "status": "Success" 
}, 
"data": [ 
    { 
     "name": "Operator 1", 
     "short_name": "OP1", 
     "_id": "534d69bba758b3b7839ba7b9", 
     "__v": 0, 
     "users": [ 
      "532ef6e28b42970ab797444f" 
     ] 
    } 
] 
} 

używam kątowa $ zasób do kwerendy API stosując następujący kod:

var apiDataTransformer = function ($http) { 
    return $http.defaults.transformResponse.concat([ 
    function (data, headersGetter) { 
     var result = data.data; 
     result.meta = data.meta; 
     console.log(result); 
     return result; 
    } 
    ]) 
}; 

angular.module('ua.common').factory('uaApi', function($resource, $http){ 
    var factory = {}; 
    factory.operator_ressource = $resource(
    '/operators/:operatorId', 
    {}, 
    {'query': {method: 'GET', isArray: true, transformResponse: apiDataTransformer($http)  } } 
); 
    return factory; 
}) 

Gdybym drukować Konsola wynik zapytania do tych zasobów jest tutaj:

uaApi.operator_ressource.query({}, function(response){ 
    factory.operators_list = response; 
    console.log(response); 
}); 

// Console Output 
[f, $promise: Object, $resolved: true] 
0: f 
    __v: 0 
    _id: "534d69bba758b3b7839ba7b9" 
    name: "Operator1" 
    short_name: "OP1" 
    users: Array[1] 
     0: "532ef6e28b42970ab797444f" 

Używanie $ zasobów, nawet jeśli użyłem transformResponse do przechowywania moich danych, straciłem meta obiekt i to jest denerwujące, ponieważ chciałbym móc, gdy page_number < number_of_pages, aby automatycznie uzyskać inne obiekty.

Jak mogę to osiągnąć z kątem? (Myślę, że jest to częste pytanie dotyczące kątowej aplikacji używającej stronicowanych api).

+0

Dlaczego robisz transformację? Najpierw przypisz zmiennej wynikowej tablicę, a następnie spróbuj dodać właściwość. Powinieneś utworzyć obiekt wynikowy, a następnie mieć dwie właściwości dla macierzy meta i danych. – Chandermani

+0

Robię to, ponieważ użycie takiej struktury z zapytaniem o $ resource powoduje problem, ponieważ kątowy oczekuje na tablicę. –

+0

To nie wygląda na to, że jest to możliwe lub zaplanowane https://github.com/angular/angular.js/issues/3826 –

Odpowiedz

2

Można zwrócić obiekt, w tym dane stronicowania bocznego i tablicę obiektów zasobów z metody zapytania, tworząc je w transformResponse.

Coś wzdłuż linii:

angular.module('ua.common').factory('uaApi', function($resource, $http){ 
    var factory = {}; 
    factory.operator_ressource = $resource('/operators/:operatorId', {}, 
     {'query': 
      { method: 'GET', 
       isArray: false, 
       transformResponse: function(jsondata){ 
        return { meta : jsondata.meta, 
          results : jsondata.map(function(result){ 
           return new factory.operator_ressource(result); 
           }) 
         } 
       } 
      } 
     } 
    ); 
    return factory; 
}); 

Podejście to działa dobrze dla mnie; Zwykle tworzę obiekt pager i zwracam do niego tablicę obiektów zasobów $.

Powiązane problemy