user2504485
user2504485

Reputation: 13

How to Set with Priority in Angularfire

I'm having trouble understanding how to set with $priority in angularfire. I am trying to add a username with the key as username.

For example if I try:

var object = {user : "name",
      $priority : "this"};

    var ref =  new Firebase(FIREBASE_URL + 'users');
  var newBar = $firebase(ref);
          newBar.$set(username, object);

The firebase set fails because of the invalid character "$" in priority.

I understand that instead I could try :

var object = {user : "name",
      $priority : "this"};

    var ref =  new Firebase(FIREBASE_URL + 'users');
  var newBar = $firebase(ref).$asArray();
          newBar.$add(object);

This succeeds in adding the object to the array, but doesn't give me the opportunity to set the key to username as I require.

I can't think of any other way to achieve this currently. Is there any way to use set that allows me to set $priority? Or any alternative method to achieve the same?

Thanks

Upvotes: 1

Views: 322

Answers (2)

Kato
Kato

Reputation: 40582

$priority is a property that exists on synchronized objects and records inside a synchronized array. As you've noted, it's not an allowed key in firebase data, so using it with $firebase::$set doesn't make sense here (since $set takes a valid json object which is stored directly into Firebase). Reading the API specifications can be a big help here.

There is also no need to create a synchronized binding for this use case. Just use the existing Firebase reference:

var ref =  new Firebase(URL);
ref.child(username).set(object, function(error){ /* ... */ });

If there is some use case for working within a synchronized binding, then just use the Firebase meta property .priority:

var object = {user: "name", ".priority": "this"};
var ref = new Firebase(URL);
var sync = $firebase(ref);
sync.$set(object).then(/* ... */);

Upvotes: 1

user2504485
user2504485

Reputation: 13

In case anyone else is looking at this, I have now taken the approach of using set first and then setting priority thereafter like this:

var object = {user : "name",
  $priority : "this"};
var username = "user1";
var ref =  new Firebase(FIREBASE_URL + 'users');
  var newBar = $firebase(ref);
          newBar.$set(username, object).then(function(){
               var ref2 =  new Firebase(FIREBASE_URL + 'users/' + username);
                var newBar2 = $firebase(ref2).$asObject();
                newBar2.$loaded().then(function(){
                    newBar2.$priority = authUser.uid;
              newBar2.$save();
                });

          });

Upvotes: 0

Related Questions