Question

I am using angularFire v 0.5.0

On my returned object I do a $add.

What would be the best way to get the generated key?

It must be something in the succes callback of the $add, because the key will come back asynchrounlusly?

scope.settings = $firebase(ref);

scope.settings.value = {
    vat: {
      inclusive: true
    }
}
            }
scope.settings.$add (scope.settings.value).then( function ( {
  scope.settings.key = ???
});

note: this is not the actual code, this is just to clarify the problem.

The actiual code is inside a factory in the loaded event, and there is a check if there is already a settings object inside the database.

This somewhat strange construct is to make it easyer for consumers of the factory to change the settings. The settings is a singleton. AngularFire does not return a array of objects, but every item is a object in the settings, with its own key.

Was it helpful?

Solution

$add returns a Firebase ref. Call name() on that ref.

scope.settings.$add(…).name();

See https://github.com/firebase/angularFire/blob/master/angularfire.js#L127.

OTHER TIPS

from the angularfire docs:

The $add method takes a single argument of any type. It will append this value as a member of a list (ordered in chronological order). This is the equivalent of calling push(value) on a Firebase reference.

from the firebase docs (about push()):

Returns A Firebase reference for the generated location.

so, i think the "key" that you want is the return value of the $add.

Maybe they've changed it in newer versions, now it works like this:

$add() will return a promise. You have to use the callback which runs on success. For example:

var something = $scope.somethings.$add({name: "foo"});
something.then(function(e) {
    console.log(e.name())
});

This allows you to perform different actions based on the outcome of the save/write attempt to Firebase.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top