2015-06-10 41 views
2

我正在使用遵循JSON API规范的API。ngResource和Json API规范

http://jsonapi.org/ 

我建立使用ngResource在离子某个应用,和resource.query()方法预计响应是一个数组:

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

但是,嵌套在JSON API规格通行证下在data属性:

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

我怎样才能自动后期处理来自API的响应去完成ngResource期待?

回答

5

查看transformResponse和拦截器对象。

https://docs.angularjs.org/api/ngResource/service/ $资源

编辑:添加代码

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

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

编辑:

正如你可以看到下面的查询方法是建立在默认情况下处理数组。

{ '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