了解 angularJS $resource isArray 属性
Posted
技术标签:
【中文标题】了解 angularJS $resource isArray 属性【英文标题】:Understanding angularJS $resource isArray property 【发布时间】:2015-04-14 10:26:47 【问题描述】:我正在学习 Angular 的 $resource 服务,并在 angular tutorial 中添加了一个自定义操作(查询),其 method 设置为 'get' 和 isArray设置为真
return $resource('phones/:phoneId.json', ,
query: method:'GET', params:phoneId:'phones', isArray:true
);
但是,如果您查看 the docs for $resource,“查询”操作已经将其 方法 设置为“获取”,并且 isArray 已经被 默认。所以我想我可以把这些属性排除在外。
这适用于 method 属性,但事实证明,如果我省略 isArray 属性,我会收到此错误:
错误:[$resource:badcfg] 操作资源配置错误
query
。预期响应包含一个对象但得到一个数组
这是为什么呢?
【问题讨论】:
您是否从 $resource 中删除了查询?return $resource('phones/:phoneId.json');
不,我刚刚删除了方法属性,我想删除 isArray 属性,但这不起作用
但是为什么您要创建/替换自定义查询操作,因为已经内置了一个?使用我发布的代码,查询将起作用
【参考方案1】:
我认为您误解了文档。
默认情况下不添加任何自定义操作,支持以下:
'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
);
【讨论】:
公平地说,很容易误解 Angular 的文档。 :)以上是关于了解 angularJS $resource isArray 属性的主要内容,如果未能解决你的问题,请参考以下文章
AngularJS:使用 $resource 上传文件(解决方案)
AngularJS $resource GET 中的多个参数