首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Restangular:保存和创建

Restangular:保存和创建
EN

Stack Overflow用户
提问于 2015-08-15 15:02:58
回答 1查看 1.3K关注 0票数 2

根据文档,Restangular方法save()根据需要执行POSTPUT。但是,文档也说save()只对元素起作用,那么如何为正在创建的新元素调用save()呢?

我的代码目前执行两次不同的Rest角调用,这取决于我是在创建还是更新:

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

关于更新,它是

代码语言:javascript
复制
Restangular.one('foo', id).get().then(function (response) {
    $scope.fooData = response;
});
...
$scope.fooData.save()

我是不是遗漏了什么?我认为existing希望您为这两种情况调用save,但我不知道为什么,因为在一种情况下,我需要对集合(新元素)进行POST,而在现有元素上调用另一种PUT

EN

回答 1

Stack Overflow用户

发布于 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中创建集合时,它才能工作:

代码语言:javascript
复制
var user = Restangular.one('users');
user.name = 'gonto';
user.save() // Does POST

这就是为什么它不同于使用post()的原因。save()将不使用非restangularized,也无法对Restangular.service()创建的服务进行调用。

如果使用one()从集合中检索实例,那么无论何时创建或更新元素,都可以让save()决定。否则,您将不得不自己实现putpatchpost。因此,您的代码可能会这样工作:

代码语言:javascript
复制
Restangular.all('foo').post($scope.fooData)

但是,如果在save()函数中调用Restangular.all(),则不会出现这种情况。

作为一个不同的例子,当使用嵌套模型时。我通常在一个名为empty的实例中返回集合,以避免如下所示的混淆:

代码语言:javascript
复制
app.service('Foo', ['Restangular', function(Restangular) {
    ...
    return{
        ...
        empty: (function() {
            return Restangular.service('foos');
        }),
    };
}

下面是我如何在控制器内创建新元素:

代码语言:javascript
复制
$scope.foo= Foo.empty();

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

而且它在不使用save()函数的情况下与我的API路由结构工作得很好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32025974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档