使用 AngularFire 从刚刚通过 $add 添加的元素中获取密钥

Get the key from the element just added via $add using AngularFire

我将 AngularFire 与 Firebase 一起使用,我想获取我刚刚通过 $add() 方法添加的元素的键。使用 "vanilla" Firebase 有记录的方法,请参阅 "Getting the Unique ID Generated by push()" here。不过,它似乎不适用于 AngularFire 的等效 $id

var ref = $firebase(firebaseData.ref()).$asArray();
var newItem = ref.$add({fruit: "apple", color: "red"});
var itemId = newItem.$id;
// Do stuff with itemID...

newItem 已使用新密钥(例如 -Jf-06c0QX_vMMNL3Aek)成功添加到 Firebase,但 itemId returns 未定义。

有办法吗?

来自AngularFire documentation for $add

var list = $firebase(ref).$asArray();
list.$add({ foo: "bar" }).then(function(ref) {
  var id = ref.key();
  console.log("added record with id " + id);
  list.$indexFor(id); // returns location in the array
});

如果您使用的是旧版本的 AngularFire,该方法可能仍会被调用 name,因此您需要 var id = ref.name();.

现在pushreturns一个Promise,这样就更容易拿到钥匙了:

constructor(private afDb: AngularFireDatabase) { }

  my_items$ : FirebaseListObservable<Item[]> = this.afDb.list('my-node');

  this.my_items$.push(this.item).then((item) => { 
    console.log(item.key); 
  });