Ответ 1
Я просто изменил MyService.get(...)
на MyService.query(...)
, потому что .get()
ожидает, что объект и .query()
ожидает массив.
У меня в файле контроллера есть следующее:
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)
Кто-нибудь знает, что я делаю неправильно?
Я просто изменил MyService.get(...)
на MyService.query(...)
, потому что .get()
ожидает, что объект и .query()
ожидает массив.
Вам нужно установить для параметра paramater isArray
значение true в определении вашего ресурса, если вы возвращаете массив с сервера.
var Subject = $resource('/api/TestAccounts/:action', { applicationId: 3 }, {
'getSelect': { method: 'GET', isArray: true, params: { action: 'GetSelect' } }
});
Смотрите: API-интерфейс ресурса AngularJS
По умолчанию GET ожидает объект {}, QUERY ожидает массив []. В вашем случае Web API возвращает массив для GET, поэтому вам нужно установить флаг isArray для GET как истинный. Если ваш веб-API возвратил объект, вам не нужно будет reset этот флаг, потому что это поведение по умолчанию GET.
Я знаю, что этот пост немного устарел, но я нашел решение, когда сегодня столкнулся с этой проблемой. Следуя сообщению ниже, я реализовал решение joelwreed (на полпути вниз по потоку). Он проверяет, что пункт назначения является массивом, прежде чем пытаться нажать, что устраняет проблему.