理解angularJS $ resource isArray属性

时间:2015-02-13 11:29:06

标签: angularjs ngresource

我正在学习有角度的资源服务,并在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。包含一个对象但得到一个数组的预期响应

为什么?

1 个答案:

答案 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 }
});