我正在学习有角度的资源服务,并在angular tutorial中添加了一个自定义操作(查询),其方法设置为'让'并且 isArray 设置为true
return $resource('phones/:phoneId.json', {}, {
query: {method:'GET', params:{phoneId:'phones'}, isArray:true}
});
但是,如果您查看the docs for $resource查询'已经将方法设置为' get' 默认已将 isArray 设置为true。所以我认为我可以把这些房产留下来。
这适用于方法属性,但事实证明,如果我省略了 isArray 属性,我会收到此错误:
错误:[$ resource:badcfg]操作的资源配置出错
query
。包含一个对象但得到一个数组的预期响应
为什么?
答案 0 :(得分:16)
我认为您误解了文档。
默认情况下,不添加任何自定义操作,支持以下内容:
'get': {method:'GET'},
'save': {method:'POST'},
'query': {method:'GET', isArray:true},
'remove': {method:'DELETE'},
'delete': {method:'DELETE'}
因此,默认情况下,query
操作需要返回一个数组,因为查询通常会返回一个项目数组。
所以如果你使用:
phonecatServices.factory('Phone', ['$resource', function($resource){
return $resource('phones/phones.json');
}]);
然后您可以执行如下查询:
var queryParams = { name: 'test' };
Phone.query(queryParams, {}, function (response) {
$scope.phones = response;
});
现在,如果您想添加自定义操作,则isArray
的默认设置为false
,所以:
return $resource('phones/:phoneId.json', {}, {
someCustomAction: {method:'GET', params:{phoneId:'phones'} }
});
需要返回一个对象。如果返回了一个数组,则isArray
需要设置为true
,如下所示:
return $resource('phones/:phoneId.json', {}, {
someCustomAction: {method:'GET', params:{phoneId:'phones'}, isArray: true }
});