AngularJS $资源错误 - TypeError:对象#<g>没有方法'push'

22 angularjs

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

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;
   }
);
Run Code Online (Sandbox Code Playgroud)

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

[{"id":5,"name":"xxx"},{"id":6,"name":"yyy"}]
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

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

有谁知道我做错了什么?

Roy*_*els 49

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

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

请参阅:AngularJS $资源API

  • 这是一个非常难以理解的异常消息,因为这个错误很容易实现.不过,这绝对是答案 (3认同)
  • 是的,Angular中的一些错误消息有点模糊.他们已经变得更好了,但对于仍在学习绳索的人来说,这仍然是一个主要的痛苦. (2认同)

Tho*_*enz 7

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


Dor*_*ian 5

我刚改变MyService.get(...),MyService.query(...)因为.get()期望一个对象,并.query()期望一个数组.