如果我使用:

var ref = new Firebase("https://myURL.firebaseio.com/");
var sync = $firebase(ref);
var firebaseData= sync.$asObject();


firebaseData将随着https://myURL.firebaseio.com/中数据的变化而变化。他们将同步。

如果我重组数据并将其定义为一些新变量var newStructure,该如何使其与https://myURL.firebaseio.com/firebaseData同步?

有什么方法可以监视firebaseData中的更改并调用重组方法吗?

有没有办法知道firebaseData中具体更改的内容,并且仅对newStructure进行相关更改?

尽管有使用不同结构解析的数据,newStructure是否可以直接与Firebase同步?

最佳答案

您的变量firebaseData代表您的Firebase集合。

您对firebaseData所做的所有更改将在连接之间同步:

var ref = new Firebase("https://myURL.firebaseio.com/");
var sync = $firebase(ref);
var firebaseData = sync.$asObject();


您可以观察是否对该对象进行了任何更改:

firebaseData.$watch(function(event){
    console.log("Change made to this firebase object");
    // Then you can call a function which could restructure your data:
    restructureData(firebaseData, event);
});


因此,您的restructureData函数可能如下所示:

var restructureData = function(firebaseObj, event){
    // This function updates firebase on every change to firebase
    // But we don't want to update it again after running this function
    if(event.key === "changesMadeToFirebase") return;
    firebaseObj.changesMadeToFirebase += 1;
    firebaseObj.$save().then(function(){
        console.log("data restructured");
    }, function(err){
        console.log("There was an error:", err);
    });
};


这使您可以检查对Firebase进行了多少更改,除了对"changesMadeToFirebase"字段所做的更改

尽管这是一个非常小的示例,但您可以在这里找到更多信息:

https://www.firebase.com/docs/web/libraries/angular/api.html

10-06 05:19