在Angularjs中使用$ resource时的TypeError

时间:2014-06-25 05:21:11

标签: angularjs angular-resource

我在angularjs中遇到了一个奇怪的错误。我已经在angularjs中使用$ resource模块通过注册此服务来生成休息请求

$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 ..........
    });
}]);

在其他服务器端我有一个搜索方法,上面的find动作的url返回一个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

2 个答案:

答案 0 :(得分:0)

服务上的方法不以'$'字符作为前缀。从服务返回的资源的方法以'$'为前缀。 $ promise属性的'then'方法也没有'$'作为前缀。

我认为如果你清理那种语法,你就会走上正轨。

请参阅the angular docs.

答案 1 :(得分:0)

首先关闭您的代码来调用该服务应该是:

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

接下来要检查的是,您的响应实际上是一个数组。我得到了大量的时间,我正在调用一个服务从后端获取一个对象列表,但在返回它们之前,后端将它们包装在一个Response对象中,所以接收到的角度不是一个数组,它是一个内部有数组的对象。