Restangular的put()不工作的多的put()的(Restangular put() no

2019-10-22 14:20发布

这是有问题的代码

function putCategory(category) {
        console.log(category.parent_id);
        category.put().then(function (data) {
            console.log(data.parent_id);
            delete category._updating;
            angular.extend(category, data);
            updateCategories();
        }, function (error) {
            delete category._updating;
            category.errors = readError(error);
        });
    }

这是问题的一个简单的例子:

  • 初始状态:PARENT_ID =空(它是根类)
  • 改变PARENT_ID为1,并调用putCategory。
  • 类别正确地更新(PARENT_ID = 1)。
  • 决定,我想PARENT_ID为2代替。 再次调用putCategory。
  • 类别不更新,并在相同的状态保持(PARENT_ID = 1)。 没有进一步的更新似乎坚持。
  • 如果我刷新页面,PARENT_ID仍然是1。所以至少先放()工作
  • 那么我可以再拍的变化,它会工作,但第二个(或第三等)不会。 因此,我可以回去将其更改为空,或者2,但是任何额外的改变将不会工作,除非我再次刷新。 基本上得到一次网页加载每个对象1个正确的PUT请求。

当我检查控制台日志,输入的数据是正确的(第一个控制台日志),第二个控制台日志是正确的第一时间,错误的第二次(或更高版本)。

当我看到网络选项卡上,我可以看到,即将离任的PARAMS也修正第一时间,错误在第二位。

所以,尽我所知道的,认沽()调用工作不正常,没有任何人有任何想法,为什么?

Answer 1:

Restangular确实与一些技巧性的东西this元素的结合(见复制元素的另一个问题的情况下)。 问题是最有可能在您的通话angular.extend(category, data); 。 此调用会将所有枚举的属性(包括Restangular方法),而这将是足够的更新元素的字段(如ID,姓名,日期)。

对此最简单的解决方案是使用plain()您回应的功能。 该函数返回纯数据对象,你收到的,所以你可以用它来专门复制您的数据字段。

category.put().then(function (data) {
            console.log(data.parent_id);
            delete category._updating;
            angular.extend(category, data.plain());
            updateCategories();
        });


文章来源: Restangular put() not working on multiple put()'s