22

我的控制器文件中有以下内容:

var Subject = $resource('/api/TestAccounts/:action', { applicationId: 3 }, {
   'getSelect': { method: 'GET', params: { action: 'GetSelect' } }
});

Subject.getSelect({ applicationId: 3 },
   function (resp) {
      $scope.testAccounts = resp;
      gridData = null;
   }
);

我的服务器代码运行并返回:

[{"id":5,"name":"xxx"},{"id":6,"name":"yyy"}]

但是我收到以下错误:

TypeError: Object #<g> has no method 'push'
    at copy (http://127.0.0.1:81/Scripts/angular.js:577:21)

有谁知道我做错了什么?

4

4 回答 4

49

isArray如果要从服务器返回数组,则需要在资源定义中将参数设置为 true。

var Subject = $resource('/api/TestAccounts/:action', { applicationId: 3 }, {
  'getSelect': { method: 'GET', isArray: true, params: { action: 'GetSelect' } }
});

参见:AngularJS $resource API

于 2013-04-10T17:52:30.670 回答
7

默认情况下,GET 需要一个对象 {},QUERY 需要一个数组 []。在您的情况下,Web API 为 GET 返回一个数组,因此您需要将 GET 的 isArray 标志设置为 true。如果您的 Web API 返回一个对象,那么您不需要重置该标志,因为它是 GET 的默认行为。

于 2013-07-15T19:55:34.187 回答
5

我只是更改MyService.get(...)MyService.query(...)因为.get()需要一个对象并.query()需要一个数组。

于 2013-10-02T14:53:19.887 回答
4

我知道这篇文章有点陈旧,但是当我今天遇到这个问题时,我找到了解决方案。在下面的帖子之后,我实现了 joelwreed 的解决方案(线程的一半)。它会在尝试推送之前检查目标是否为数组,从而解决了问题。

链接到在 github 上提交的问题

于 2013-06-15T21:01:21.747 回答