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).
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
Robię to, ponieważ użycie takiej struktury z zapytaniem o $ resource powoduje problem, ponieważ kątowy oczekuje na tablicę. –
To nie wygląda na to, że jest to możliwe lub zaplanowane https://github.com/angular/angular.js/issues/3826 –