web-dev-qa-db-de.com

Festlegen Ihres eigenen Schlüssels beim Hinzufügen eines Objekts zu Firebase - AngularFire

Ich kann Folgendes verwenden, um meinem Firebase-Datenspeicher ein Objekt hinzuzufügen:

var uniqueId = {
    name: "a name",
    location: "new york"
}
$scope.myItems.$add(uniqueId).then(function(firebaseId){
    // do something on success
}, function(){
    // do something if call fails
});

Das obige fügt ein Objekt zu meinem Datenspeicher hinzu. Wenn das Hinzufügen erfolgreich ist, wird eine von Firebase generierte ID zurückgegeben. Das soeben hinzugefügte Objekt wird unter diesem Schlüssel gespeichert. 

Gibt es eine Möglichkeit, den Namen des Schlüssels anzugeben, wenn ich meinen Datenspeicher hinzufüge?

15
Lloyd Banks

Alles in Firebase ist eine URL.

Nehmen Sie zum Beispiel die folgende URL.

https://myapp.firebaseio.com/users/

Angenommen, wir möchten an dieser Stelle einen Benutzer mit einem Schlüssel von 1 als Kind erstellen. Unsere URL würde so aussehen.

https://myapp.firebaseio.com/users/1

Um einen Benutzer mit AngularFire zu erstellen, können Sie eine Referenz am Benutzerknoten erstellen und $ child (1) aufrufen, um eine Referenz auf diesen Speicherort zu erstellen. 

var usersRef = new Firebase('https://myapp.firebaseio.com/users');
var userRef = new Firebase('https://myapp.firebaseio.com/user/1');

$scope.users = $firebase(usersRef);

// these are the same
$scope.userOne = $firebase(userRef);
$scope.userOne = $scope.users.$child(1);

Dann können wir $set verwenden, um den Wert des Benutzers an diesem Ort zu speichern.

var usersRef = new Firebase('https://myapp.firebaseio.com/users');
$scope.users = $firebase(usersRef);
$scope.users.$child(1).set({
  first: 'Vincent',
  last: 'Van Gough',
  ears: 1
});

In Ihrem Fall wäre das:

var uniqueId = {
    id: 1,
    name: "a name",
    location: "new york"
};
$scope.myItems.$child(uniqueId.id).$set(uniqueId);

Denken Sie daran, dass durch die Verwendung von $set alle vorherigen Daten an diesem Ort zerstört werden. Um die Werte nicht destruktiv zu aktualisieren, verwenden Sie $update.

17
David East

Sie können es so versuchen:

var empsRef = ref.child("employees");

empsRef.child('11111').set({
  lastname: "Lee",
  firstname: "Kang"
});

empsRef.child('22222').set({
  lastname: "Nut",
  firstname: "Dough"
});

Die Ausgabe sollte so aussehen:

"employees" : {
  "11111" : {
    "lastname" : "Lee",
    "firstname": "Kang"
  },
  "22222" : {
    "lastname" : "Nut",
    "firstname": "Dough"
  }
}
9
Lee

Anscheinend wurden $ child und $ set aus der AngularFire-API entfernt. 

Hier ist mein Workaround. 

  1. Hören Sie auf $ onAuth
  2. Erstellen Sie ein neues $ firebaseObject mit dem Ref als Kind von Benutzern und der ID als UID (in diesem Fall Facebook).
  3. Speichern Sie das Benutzerobjekt

    angular.module("app.services", []).factory("Auth", function ($firebaseAuth, $firebaseObject, FirebaseUrl) {
    var auth = $firebaseAuth(new Firebase(FirebaseUrl));
    
    auth.$onAuth(function (authData) {
        if (authData) {
            var ref = new Firebase(FirebaseUrl + "/users/" + authData.uid);
            var user = $firebaseObject(ref);
            user.name = authData.facebook.displayName;
            user.$save().then(function () {
                console.log(user);
            });
        }
    });
    return auth;
    })
    

Ich habe immer noch Probleme damit, dies überprüfbar zu machen ...

3
Alex

.set funktioniert immer noch in eckfeuer api

Also probier das aus ...

var gT = $scope.ultima[0].guia + 1;                    
var _db = firebase.database().ref('/guias/' + gT);
                      _db.set({
                    'artigo': _dt.artigo,
                    'inicio': $scope.ultima[0].fim + 1,
                    'guia': $scope.ultima[0].guia + 1,
                    'fim': $scope.ultima[0].fim + 1 + (1 * _dt.quantidade),
                    'quantidade': _dt.quantidade,
                });
0
Asaph Souza