我有以下服务,month
总是返回一个数组。
query
但是,以下调用总是出错?
.factory('ClosingDocService', ['$resource', function ($resource) {
return $resource("http://localhost:5001/api/ClosingDoc/:id",
{ id: "@id" },
{
'query': { method: 'GET' },
'save': { method: 'POST', transformRequest: angular.identity, headers: { 'Content-Type': undefined } }
});
}])
使用fiddler显示已调用以下正确的URL并返回值。
ClosingDocService.query({ category: model.category }).$promise
.then(function (x) { });
错误:
angular.js:13920错误:[$ resource:badcfg]操作
http://localhost:5001/api/ClosingDoc?category=XXX
的资源配置出错。包含一个对象但得到一个数组的预期响应
答案 0 :(得分:0)
我找到了一个解决方案 - 添加isArray: true
。但为什么呢?
'query': { method: 'GET', isArray: true },
答案 1 :(得分:0)
这是由于处理$resource
对象方法的原因所致。
来自$resource
上的docs:
重要的是要意识到调用
$resource
对象方法会立即返回一个空引用(对象或数组,具体取决于isArray
)。从服务器返回数据后,将使用实际数据填充现有引用。这是一个有用的技巧,因为通常将资源分配给模型,然后由视图呈现。具有空对象导致无渲染,一旦数据从服务器到达,则对象用数据填充,并且视图自动重新呈现其自身显示新数据。这意味着在大多数情况下,永远不必为动作方法编写回调函数。
基本上,除非您提供isArray: true
,否则$resource
对象方法为要返回的数据预先分配 Object
。当返回的数据实际上最终成为一个数组时,该数据无法填充到预先分配的对象中。
答案 2 :(得分:0)
我也有同样的问题。对我有用的是以下修复程序
将query
更改为get
如下:
ClosingDocService.get({ category: model.category }).$promise
.then(function (x) { });