Restangular:保存与创建

时间:2015-08-15 15:02:58

标签: angularjs restangular

根据文档,Restangular方法save()根据需要执行POSTPUT。但是,文档还说save()仅适用于元素,那么如何为正在创建的新元素调用save()

我的代码目前执行两种不同的Restangular调用,具体取决于我是创建还是更新:

对于创建,它是Restangular.all('foo').post($scope.fooData)

更新它是

Restangular.one('foo', id).get().then(function (response) {
    $scope.fooData = response;
});
...
$scope.fooData.save()

我错过了什么吗?我认为Restangular要求你为这两种情况调用save,但我不知道在一种情况下我需要POST到一个集合(新元素)和另一个PUT在现有元素上。

1 个答案:

答案 0 :(得分:1)

关于Restangular.one("building", 5).post('users', user).then(function(postedUser) { console.log("Success"); }) ,它的创建者曾说过一次( link ):

  

应该对集合进行帖子,而不是对元素进行。所以,如果你想   要将用户添加到建筑物中,您应该执行以下操作:

save()

现在one方法用于决定是否使用PUT或POST请求。但根据其this github issue中的创建者,只有在var user = Restangular.one('users'); user.name = 'gonto'; user.save() // Does POST 内创建您的收藏时才会有效:

post()

这就是使它与使用save()不同的原因。 Restangular.service()不适用于非restangularized对象,无法在one()创建的服务上调用。

如果您使用save()从您的收藏集中检索某个实例,那么您可以让put决定该元素何时创建更新< / em>的。如果没有,那么您必须自己实施patchpostRestangular.all('foo').post($scope.fooData) 。所以你的代码可以这样工作:

save()

但如果在Restangular.all()函数内调用empty,则根本不会。

作为一个不同的例子,在使用嵌套模型时。我通常在名为app.service('Foo', ['Restangular', function(Restangular) { ... return{ ... empty: (function() { return Restangular.service('foos'); }), }; } 的实例中返回集合,以避免混淆:

$scope.foo= Foo.empty();

$scope.addFoo=function($foo){
    $scope.foo.post($foo).then(function(data) {
        ...
   });
}

然后我就是在控制器中创建新元素的方法:

save()

使用我的API路由结构,它可以正常工作而不使用save()函数。

  • 注意:谈话&amp;将python setup.py install 方法添加到 Restangular 之前的参数已启动here