复制一个 $firebaseObject 并将其保存到不同的位置

Copy a $firebaseObject and save it to a different location

在我的应用程序中,我使用 $firebaseObject 从我的 firebase 获取一个对象。使用此对象有两个选项,更改它并保存对象中的更改或更改它并将其另存为新版本。

我的问题是让第二个选项起作用。首先,我可以简单地使用 $save() 并且它完美地工作,但到目前为止我还无法制作对象的副本并将其保存在我的 firebase 中的不同位置。

到目前为止我已经尝试过:

前 3 个选项失败(错误代码与选项一起显示),最后一个选项有效但不是真正的选项,因为对象可以有不同的字段。

有人知道这个问题的解决方案吗?

您可以使用 $firebaseObject 的 $value 字段。

例如:

var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
var FBObj1 = $firebaseObject(ref.child('child'));
ref.child('newChild').set(FBObj1.$value);

编辑:

因为这只适用于原语,你可以尝试这样的事情:

function getObject(obj) {
    var newObj = {};
    for (var key in obj) {
       if (key.indexOf('$') < 0 && obj.hasOwnProperty(key)) {
          newObj[key] = obj[key];
       };
    }
    return newObj;
}

并使用 getObject(FBObj1) 插入 FBObj1.$value

非常有用的答案。添加我自己的解决方案,这只是 Frane 的扩展并使用 Angularfire 2.3:

最终结果:

  • 将第一个对象绑定到 DOM 保存第一个对象时,保存相同的对象 使用相同密钥的另一个节点以允许将来 cross-reference理论上,如果需要也可以插入字段 在保存到节点 #2
  • 之前

html:

<a href="#" editable-text="data.field1" onaftersave="saveData()">
{{ data.field1 || "empty"  }}
</a>

<a href="#" editable-text="data.field2" onaftersave="saveData()">
{{ data.field2 || "empty"  }}
</a>

在控制器中:

var ref = firebase.database().ref().child(entries);
var obj = $firebaseObject(ref);
obj.$bindTo($scope, "data");


function saveData(){
    $scope.data.$save().then(function() {
        var newObject = getObject($scope.data);
        // In theory, add other field here
        var ref2 = firebase.database().ref().child(otherNode).child($scope.data.$id);
        ref2.update(newObject);
    }).catch(function(error) {
        console.log('Error ' + error.message);
    });
}

function getObject(obj) {
    var newObj = {};
    for (var key in obj) {
        if (key.indexOf('$') < 0 && obj.hasOwnProperty(key)) {
            newObj[key] = obj[key];
        };
    }
    return newObj;
}