根据文档,Restangular方法save()根据需要执行POST或PUT。但是,文档也说save()只对元素起作用,那么如何为正在创建的新元素调用save()呢?
我的代码目前执行两次不同的Rest角调用,这取决于我是在创建还是更新:
对于create,它是Restangular.all('foo').post($scope.fooData)
关于更新,它是
Restangular.one('foo', id).get().then(function (response) {
$scope.fooData = response;
});
...
$scope.fooData.save()我是不是遗漏了什么?我认为existing希望您为这两种情况调用save,但我不知道为什么,因为在一种情况下,我需要对集合(新元素)进行POST,而在现有元素上调用另一种PUT。
发布于 2015-08-18 17:26:25
关于post(),它的创建者曾经说过(https://stackoverflow.com/questions/17302395/restangular-post-always-empty#answer-17304522):
应当对集合,而不是对元素进行发布。因此,如果要向建筑物中添加用户,则应执行以下操作: Restangular.one(“构建”,5).post(用户,用户).then(功能(PostedUser){console.log(“成功”);})
现在,save()方法用于决定是使用PUT请求还是POST请求。但是根据这个github问题中的创建者,只有在one中创建集合时,它才能工作:
var user = Restangular.one('users');
user.name = 'gonto';
user.save() // Does POST这就是为什么它不同于使用post()的原因。save()将不使用非restangularized,也无法对Restangular.service()创建的服务进行调用。
如果使用one()从集合中检索实例,那么无论何时创建或更新元素,都可以让save()决定。否则,您将不得不自己实现put、patch或post。因此,您的代码可能会这样工作:
Restangular.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()方法添加到Restangular started https://github.com/mgonto/restangular/issues/584之前,请先谈谈和参数。https://stackoverflow.com/questions/32025974
复制相似问题