【问题标题】:How to apply a partial update to an object using AngularFire如何使用 AngularFire 对对象应用部分更新
【发布时间】:2014-09-25 09:50:12
【问题描述】:

Angularfire 0.8 中的 $save() 让我很困惑。

这是一个最小的例子 - 我的 controllers.js 文件中的一个 sn-p:

    .controller('LandingPageController', ['$scope','$firebase', function($scope,$firebase) {
        $scope.addNode = function() {
            var FB = new Firebase('https://protodb.firebaseio.com/testrecords/');
            var fbr = $firebase(FB);
            fbr.$set(1,{firstname: 'James'});
        }
        $scope.addAttribute = function() {
            var FB = new Firebase('https://protodb.firebaseio.com/testrecords/1');
            var fbr = $firebase(FB).$asObject();
            fbr.lastname = "Bond";
            fbr.$save();
        }
        }])

addNode()被调用时,果然在我的firebase中创建了一个节点:

但是当addAttribute() 被调用时,整个记录都被替换了,而不是我所期望的,这是要添加的“姓氏”属性。

毫无疑问,我误解了文档。有人可以帮忙吗?

更新:

好的,我需要等到对象加载完毕。它现在可以工作了,将addAttribute 更改为:

    $scope.addAttribute = function() {
          var FB = new Firebase('https://protodb.firebaseio.com/testrecords/1');
          var fbr = $firebase(FB).$asObject();
          fbr.$loaded().then(function() {
              fbr.lastname = "Bond";
              fbr.$save();
          });
    }

【问题讨论】:

    标签: angularjs firebase angularfire


    【解决方案1】:

    正如你已经发现的那样:

    1. FirebaseObject(由$asObject() 返回)没有$update 方法。
    2. 当您在 FirebaseObject 完全加载之前调用 $save() 时,您最终可能会删除其他属性

    要修补现有数据,您可以:

    1. 要么等待整个对象被加载(就像你在更新问题时所做的那样)
    2. 或直接致电$firebase.$update
    $firebase(FB).$update({ lastname: "Bond" });
    

    最后一种方法的优点是您不会拉下整个对象,而只会更新单个属性。请注意,在大多数情况下,这可能是 premature optimization,但仍然...

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    • 2022-07-23
    相关资源
    最近更新 更多