$ resource:badcfg操作`query`的资源配置错误。包含一个对象但得到一个数组的预期响应

时间:2016-10-06 18:43:52

标签: angularjs rest ngresource

我有以下服务,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 的资源配置出错。包含一个对象但得到一个数组的预期响应

3 个答案:

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