AngularJS资源工厂始终返回空响应

时间:2013-06-21 20:15:36

标签: javascript jquery angularjs angularjs-resource

好的,所以我觉得我在这里缺少一些基本的东西,但是我无法理解它在阅读文档和其他例子。我在这样的工厂有一个资源:

loteManager.factory('Lotes', function($resource) {
  return $resource('./api/lotes/:id',{ id:"@id" }, {
     get:  {method:'GET', isArray:true}
   });
});

我的控制员:

loteManager.controller('LoteCtrl',
  function InfoCtrl($scope, $routeParams, Lotes) {
    Lotes.get(function (response){
      console.log(response);
    });
});

当我像这个$resource('./api/lotes/21'手动定义id时,它可以工作,所以我认为问题是将id传递给工厂,但我已经尝试添加params:{id:"@id"},但这也不起作用。

2 个答案:

答案 0 :(得分:2)

您需要传入ID。

这样的事情:

loteManager.controller('LoteCtrl',
  function InfoCtrl($scope, $routeParams, Lotes) {
    Lotes.get({id: $routeParams.loteId}, function (response){
      console.log(response);
    });
});

...假设您的路线定义如下:

$routeProvider.when('/somepath/:loteId, {
    templateUrl: 'sometemplate.html',
    controller: LoteCtrl
});

根据documentation

var User = $resource('/user/:userId', {userId:'@id'});
var user = User.get({userId:123}, function() {
  user.abc = true;
  user.$save();
});

答案 1 :(得分:1)

我认为您的问题是您说'get'方法(id)有参数,但是当您在Lotes.get(..)拨打电话时,您并未给出方法'get'。

所以,我认为,你的方法调用应该是

Lotes.get({id: SOME_Id}, function(response){
    // ...do stuff with response
});

我对这种语法并不完全确定,因为我个人更喜欢$q服务,因为它提供了更大的灵活性,但这就是你的代码一般出了问题,你没有给出你的方法它需要的参数(一个id)。

此外,请记住使用Angular的$timeout服务,因为您正在进行异步通话。