2017-01-13 4 views
0

私はWebアプリケーションを作成し始めました。ユーザーオブジェクトは_usernameというキーを最初に持っています。アンダースコアで始まるFirebaseデータベースのキーが削除されました

オブジェクトをfirebaseデータベースに追加すると、そのオブジェクトはそこには存在しません。それ以外はすべてです。

なぜこのキーと値のペアがデータベースにないのですか?私はそれが有効なJSONであることを意味しますか?
私は単にそれを名前を変更する以外の解決策があるのですか?配列にプッシュされ

私のオブジェクトには、以下の構造を有している。

{ 
    _username:"", 
    history:[], 
    // ... 
} 

マイコード:

var users = $firebaseArray(ref.child("user")); 

// adding user 
users.$add($scope.session.user); 
// logging afterwards - also no '_username' 

// logging on init 
users.$loaded().then(function (data) { 
    $log.debug(data); 
}); 

すべてはそれが見えます...下線VARを除き、

+0

私はちょうどすぐにテストされ、間違いなく '_underscoreを追加することができます。Firebaseコンソールで '1'。 [問題を再現する最小限のコード]を共有してください(http://stackoverflow.com/help/mcve)。 –

+0

@FrankvanPuffelenよく私のmcを追加 – rala

答えて

2

を格納しています$add()(より具体的には$firebaseUtils.toJSON())のような名前のドロッププロパティーは、_で始まります。

console.log($firebaseUtils.toJSON(user)); 

回避策は、直接のJavaScript SDKを介してデータベースにユーザーオブジェクトを記述するために、次のようになります:これは見する簡単な方法

ref.child("user").push(user); 

このは、有効なキーを持つすべてのプロパティを記述しません接頭辞は_です。

AngularFireは同じJavaScript SDKの上に構築されているので、変更をすぐに拾うでしょう。 jsbinで

デモ:http://jsbin.com/lobadej/edit?js,console

2

これはプライベート変数を宣言するための共通のJavaScript大会が_でそれらの接頭辞であるという事実に基づいて、設計上の決定でした。

デフォルトのSDKの動作と異なる理由については、AngularFireは拡張可能なクラスインスタンスを作成しており、クライアント側の機能(データ転送用の未処理のJSONオブジェクトのみではありません)を提供しています。したがって、ここでの目標は、$ firebaseArrayと$ firebaseObjectを拡張して使用すること、および保存とサーバーの同期を可能な限り透明にすることです。

これを行うには、「ローカル」またはプライベートのものをサーバーに送信するものから分離するという単純な規則が必要です。 $は技術的にAngularライブラリによって予約されているので、_は引き続きあなたのプライベート変数とメソッドpre-ES6の前に付ける適切な方法です。

ここに問題を抱えている人が多かったのですが、ほぼ3年後にこの方法で実装されていることを考えれば、これが最初のコメントです。

も参照してください:https://github.com/firebase/angularfire/issues/901

+0

ええ - 私は不思議だった|といくつかの変数私は 'priories'とアンダースコア - 理由を知って良い – rala

関連する問題