3

同様の質問がここで尋ねられましたが、受け入れられた1つの回答は実際には質問に答えていません.

AngularFire を使用して、リレーショナル スタイルのデータベースを作成することは可能ですか? それとも UniqueID にアクセスしますか?

AngularFire を介してネストされたアイテムを Firebase に追加する場合、各アイテムは実際には、番号が付けられた別のインデックスの下に設定されます。

ここに画像の説明を入力

このため、次の相対 URL でユーザーの製品を参照する必要があります。

users/:id/products

私の質問は、ユーザー (またはそれに関するもの) を作成したら、どうすればインデックス値を取得できますか?

// Get the users
var ref = new Firebase('https://myapp.firebaseio.com/users')
var promise = angularFire(ref, $scope, 'users', {})
promise.then(function() {
  // Can I get the ID from here somehow?
})

// Users saves a product
id = null // ???
var product = {
   name: 'new product',
   desc: 'this is a new product'
}
var ref = new Firebase('https://myapp.firebaseio.com/users/' + id + '/products')
var promise = angularFire(ref, $scope, 'products', {})
promise.then(function() {
  $scope.products.push(product)
})

アップデート

明確にするために、これはユーザー認証に関する質問ではありません。私はすでにその世話をしています。混乱させて申し訳ありません。

Firebase で他のものの「下」にあるものを作り始めたとき、レンガの壁にぶつかりました。usersでもsでも構いませんgiraffe

「お店」を作ると、各お店には「商品」があります(としましょう)。

それらを取得できるようにしたい

stores/{storeId}/products

しかし、storeIdAngularFire から作成されたインデックス ID が理想的です (添付の図を参照してください)。問題は、AngularFire がこの ID を通知せずに作成することです。

次のような成功関数があった場合

success: function(response) { 
  $scope.store.id = response.indexId
}

それは最も理にかなっていますが、AngularFire がこの非常に必要な機能を準備しているようには見えません。私が間違っていることを証明してください。:)

4

3 に答える 3

3

AngularFire の新しいバージョンでは、通常の JavaScript オブジェクトであるかのように、AngularFire オブジェクトを反復処理できます。

$scope.users = {};
angularFire(ref, $scope, 'users').then(function() {
    for (var id in $scope.users) {
        if ($scope.users.hasOwnProperty(id) {
            ...
        }
    }
});

すべてのユーザーデータをすべてのクライアントにロードすることになるため、これが本当にやりたいことだとは思いません。おそらくFirebase Simple Loginを使用して、クライアントにユーザー名またはその他の種類の ID を提供してもらう必要があります。

最後に、ブラウザの開発者ツールに慣れていますか? それらは、AngularFire のように、何をすべきかわからないオブジェクトの内部を覗いて、それらが内部でどのように構造化されているかを確認するのに非常に役立ちます。

于 2013-10-19T16:10:07.153 に答える
1

私は、そのような種類の問題すべてに対して、最善かつ最速の答えを持っています!!!

var chru;
    var ref = new Firebase("https://myapp.firebaseio.com/users/");
    var sync = $firebase(ref);
    var users= syncSelect.$asArray();
    $scope.users= users;
    users.$loaded().then(function() {
        chru = users.length;
    });

    $scope.specificIdOnSelect = function() {
        var jj;
        for (jj = 0; jj < chru; jj++) {
            var keyer = users.$keyAt(jj);
            var rec = users.$getRecord(keyer);

            if ($scope.userSelected== rec.name) {
                alert("Unique Key of " + $scope.users+ " is " + users.$keyAt(jj));
            }
        }
    };

    $scope.allIds = function() {
        var jj;
        for (jj = 0; jj < chru; jj++) {
            var keyer = users.$keyAt(jj);
            var rec = users.$getRecord(keyer);
            alert("Unique Key of " + $scope.users+ " is " + users.$keyAt(jj));
        }
    };

試してみて、これが役立つかどうか教えてください!!!

于 2015-04-08T19:29:24.373 に答える