Angular资源REST没有方法'$ save'

时间:2013-08-23 08:11:50

标签: angularjs

我想使用$resource与REST API进行交互,但在调用save方法时出现has no method '$save'错误。我的代码的灵感来自AngularJS $resource RESTful example

上的答案
myapp.factory('Monitoring', function($resource) {
   return $resource('http://localhost:8080/wepapp/network/v1/cronjobs/:id', { id: '@id' } );
});

Q1:@{ id: '@id' }的目的是什么?我在大多数例子中都找到了它。

myapp.factory('MonitoringCRUDControllerService', ['Monitoring', function(Monitoring) {
    return {
        create: function(id, command, schedule) {
            console.log("create");
            console.log(command);
            console.log(schedule);
            Monitoring.id = id;
            Monitoring.command = command;
            Monitoring.schedule = schedule;
            console.log(Monitoring);
            Monitoring.$save();
        }
    }
}]);

正确注入Monitoring对象:

function Resource(value){
        copy(value || {}, this);
      } 

调用$save失败,错误为has no method '$save'

Q2:保存之前$的目的是什么?

问题3:为了使保存方法有效,我缺少什么?

1 个答案:

答案 0 :(得分:1)

您需要像这样(未经测试)创建Monitoring类的实例:

var m = new Monitoring({id:id});
m.command = command;
m.schedule = schedule;
m.$save();

文档(http://docs.angularjs.org/api/ngResource.$resource)有一个类似的例子:

var newCard = new CreditCard({number:'0123'});
newCard.name = "Mike Smith";
newCard.$save();

前一段时间我问了关于@标志的相同问题:"at" sign in parameter names in resource definition。基本上@符号表示将从对象的属性中读取值。或者正如相同的文档所说:

  

如果参数值以@为前缀,那么该值的值   参数是从数据对象中提取的(对非GET有用)   操作)。

$不是任何特殊字符,它只是方法名称的一部分。