2016-02-19 85 views
1

在我的應用程序中,我使用$ firebaseObject從我的firebase獲取對象。該對象具有兩個選項,可以對其進行更改並將更改保存在對象中,或將其更改並保存爲新版本。

我的問題是獲得第二個選項的工作。對於第一個我可以簡單地使用$ save(),它完美的工作,但到目前爲止,我還沒有能夠製作對象的副本,並將其保存在我的Firebase中的不同位置。

到目前爲止,我曾嘗試:

  • 保存的實際對象在不同的​​位置(錯誤:Firebase.push失敗:第一個參數包含在物業無效鍵($$的conf))
  • 使用設angular.copy($ firebaseObject)創建對象的副本(Error:'length'getter調用的對象不會實現接口存儲。原始,見$value documentation
  • 使在javascript一個單獨的對象,並手動將所有的值從$ firebaseObject

複製的第3個選項失敗(錯誤碼,只顯示選項),最後一個選項的作品,但並不是真的,因爲對象的選項可以有不同的領域。

有沒有人知道這個問題的解決方案?

回答

1

您可以使用$ 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; 
} 

,並使用FBObj1的的getObject(FBObj1)insetad $ value

+0

不幸的是,如果$ firebaseObject是一種原始的(布爾值,字符串或數字)這僅適用。我的對象有多個字段,$ value返回undefined。我會更新我的問題以包含此信息。 –

+0

我更新了答案 –

+0

完美,我實際上是在想另一種方式,以我需要的領域而不是刪除那些我不需要的東西:) –

0

難以置信的有用答案。加入我自己的解決方案,它只是對式剛架的擴展和使用Angularfire 2.3:

最終結果:

  • 綁定首要目的是DOM當保存第一個對象,相同的對象 保存到另一個節點使用相同的密鑰

    :允許將來 交叉引用在理論上,你也可以根據需要 保存到節點#2

的HTML之前插入字段

在控制器:

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; 
} 
相關問題