2015-06-10 2 views
2

Я работаю с API, который следует спецификациям API JSON.ngResource и Json API spec

http://jsonapi.org/ 

Я строю приложение в ионическом, используя ngResource и метод resource.query() ожидает ответа быть массивом:

[ 
    { 
    "id": 1, 
    "foo": "bar" 
    }, 
    { 
    ... 
    } 
] 

Но JSON API спецификации перевалы, которые вложены в data атрибут:

{ 
    "data": [ 
    { 
     "id": 1, 
     "foo": "bar" 
    }, 
    { 
    ... 
    } 
    ] 
} 

Как я могу автоматически постобработки ответ от API, чтобы выполнить то, что ngResource ожидает?

ответ

5

Посмотрите на объекты transformResponse и interceptor.

https://docs.angularjs.org/api/ngResource/service/ $ Ресурс

EDIT: Добавление кода

$provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) { 
    return { 
     'response': function(response) { 
     response.data = response.data.data; 
     return response; 
     } 
    }; 
    }); 

$httpProvider.interceptors.push('myHttpInterceptor'); 
1

EDIT:

Как вы можете видеть ниже, метод запроса построен для обработки массивов по умолчанию.

{ 'get': {method:'GET'}, 
    'save': {method:'POST'}, 
    'query': {method:'GET', isArray:true}, 
    'remove': {method:'DELETE'}, 
    'delete': {method:'DELETE'} 
}; 
  1. вы можете использовать простой метод GET, чтобы получить ответ список объектов из вашего API.
  2. ИЛИ вы можете изменить поведение по умолчанию запроса таким образом.

:

var config = { method:'GET', isArray: false }; 
var url = 'http://jsonapi.org'; 
$resource(url, {}, {query: config}); 

более подробно. Пожалуйста, проверьте https://docs.angularjs.org/api/ngResource/service/$resource