【问题标题】:AngularFire equivalent to $setPristine?AngularFire 相当于 $setPristine?
【发布时间】:2015-10-13 21:51:50
【问题描述】:

我正在尝试了解使用我的 Firebase 数据创建 $setPristine 等效项的正确工作流程。

我的工作流程如下:

1) 创建 Firebase 对象(通过 Angularfire Generator 'SyncData')

2) 表单数据修改 $firebase 对象。

3) 更新远程模型,我使用myRef.$save()

所有这些都运行良好。现在,我正在尝试在表单上添加一个“重置”按钮,以便本地修改的数据将恢复为远程存储的数据。

到目前为止,我遇到了一些问题。我尝试重新初始化 firebase 引用,例如 myRef = syncData('/my/path'),但现在不仅可以正常工作,而且还会破坏远程数据对象!

重新拉取远程数据以在我的 Angular 模型中使用的正确方法是什么?

【问题讨论】:

  • 你能简单地将脏的本地数据存储在一个单独的对象中吗?那么当 reset 被调用时,再次从 $firebase 对象更新? angularFire change 事件可以帮助您同步两者。
  • 单独复制数据元素会非常乏味。但肯定有某种方法可以重新初始化远程数据结构。
  • @BrianABird - 如果您使用 angular.copy() 或 angular.extend() 复制会怎样
  • 另外请记住,如果您正在使用 $bind,并且范围 var 已经存在,这可能是正在吹走您的远程数据的原因(如果存在本地值,例如空对象它被推送到服务器)。
  • @MikePugh angular.copy() 解决了这个问题!谢谢!

标签: angularjs firebase angularfire


【解决方案1】:

我知道这是一个老问题,但我自己也遇到了这个问题。

经过一番搜索,我发现了这个帖子:http://grokbase.com/t/gg/firebase-angular/1499haaq4j/editing-data-as-a-copy

这导致我从@Kato:https://gist.github.com/katowulf/8eaa39eab05a4d975cd9 得到一个过时的代码 sn-p(2 个月大声笑 XD)

我对此进行了修改,以便与 Firebase 2.3.1 和 AngularFire 1.1.3 一起使用:

app.factory('ResetFactory', function($firebaseArray) {
    return $firebaseArray.$extend({
        reset: function(itemOrIndex) {
            var key, self;
            self = this;
            key = self.$keyAt(itemOrIndex);
            self.$ref().child(key).once('value', function(snap) {
               self.$$updated(snap);
            });
        }
    });
});

可以通过以下方式调用:

var comments = new RevertFactory(ref.child('comments'));

# variable comment is for example an ng-repeat that's being edited
comments.reset(comment);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多