TypeError при использовании $ resource в Angularjs

У меня странная ошибка в angularjs. Я использовал модуль $ resource в angularjs, чтобы делать запросы на отдых, зарегистрировав эту службу.

$provide.service("CustomerService", ['$resource', function ($resource) {
    return $resource('/com/caspco/customers/:url:id', {}, {
        query: { method: 'GET', isArray: true, params: {id: '@id'}},
        find: { method: 'POST', isArray: true ,params:{url:'search'}},
        .......... other actions ..........
    });
}]);

на остальной стороне сервера у меня есть метод поиска с указанным выше URL-адресом действия find, который возвращает массив json. когда я вызываю действие find таким образом в контроллере:

service.$find().$promise.$then(function (res) {
    console.log("resource is" + res);
}, function (error) {
    console.log("error");
});

Это поднимает

TypeError: (anonymous function) angular.js:2070
(anonymous function) angular.js:1516
k.$apply angular.js:2575
(anonymous function) angular.js:4323
o.event.dispatch jquery.js:3
r.handle

person Pooya    schedule 25.06.2014    source источник
comment
Дополнительные сведения об ошибке ...   -  person gkalpak    schedule 25.06.2014
comment
вы включили файл JS angular-resources?   -  person Eylen    schedule 25.06.2014
comment
@ Эйлен Да! Я включил   -  person Pooya    schedule 25.06.2014
comment
@ Пуя: Использование минифицированной версии при отладке не очень помогает ...   -  person gkalpak    schedule 25.06.2014


Ответы (2)


Методы службы не имеют префикса "$". Методы для ресурсов, возвращаемых службой, имеют префикс "$". Метод 'then' в свойстве $ prom также не имеет префикса '$'.

Я думаю, что если вы очистите этот синтаксис, вы окажетесь на правильном пути.

См. документацию по angular.

person coryj    schedule 25.06.2014
comment
Проблема возникла при ответе сервера - person Pooya; 25.06.2014
comment
И происходило только при ответе сервисов ответом массива - person Pooya; 25.06.2014

Прежде всего, ваш код для вызова службы должен быть:

service.find().$promise.then(function (res) {
  console.log("resource is" + res);
}, function (error) {
  console.log("error");
});

Следующее, что нужно проверить, - это действительно массив. Я очень сильно увлекся этим, я звонил в службу, чтобы получить список объектов из бэкэнда, но перед их возвратом бэкэнд оборачивал их внутри объекта Response, так что полученный angular не был массивом, это был объект с массивом внутри него.

person M21B8    schedule 25.06.2014