Подтвердить что ты не робот

Ошибка ресурса AngularJS $- TypeError: Объект # <g> не имеет метода 'push'

У меня в файле контроллера есть следующее:

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)

Кто-нибудь знает, что я делаю неправильно?

4b9b3361

Ответ 1

Я просто изменил MyService.get(...) на MyService.query(...), потому что .get() ожидает, что объект и .query() ожидает массив.

Ответ 2

Вам нужно установить для параметра paramater isArray значение true в определении вашего ресурса, если вы возвращаете массив с сервера.

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

Смотрите: API-интерфейс ресурса AngularJS

Ответ 3

По умолчанию GET ожидает объект {}, QUERY ожидает массив []. В вашем случае Web API возвращает массив для GET, поэтому вам нужно установить флаг isArray для GET как истинный. Если ваш веб-API возвратил объект, вам не нужно будет reset этот флаг, потому что это поведение по умолчанию GET.

Ответ 4

Я знаю, что этот пост немного устарел, но я нашел решение, когда сегодня столкнулся с этой проблемой. Следуя сообщению ниже, я реализовал решение joelwreed (на полпути вниз по потоку). Он проверяет, что пункт назначения является массивом, прежде чем пытаться нажать, что устраняет проблему.

Ссылка на вопрос, поданный на github