0

当我push("number")使用 angularfire2 进入 firebase 时,数字不会直接附加,而是嵌套在生成的代码中。

Firebase 实时数据库内部:

1)初始代码:

  "myList": {
    "0": {
      "key1": "val1"
    },
    "1": {
      "key2": "val2"
    }
  }

2) 之后.push({"key3": "val3"})

  "myList": {
    "0": {
      "key1": "val1"
    },
    "1": {
      "key2": "val2"
    },
    "-generatedcode_": {
      "key3": "val3"
    }
  }

为什么没有直接添加新对象,没有嵌套?

4

1 回答 1

6

您所看到的是预期的行为。pushAngularFire2 上的函数FirebaseListObservable使用底层 Firebase API push,它生成一个唯一的、可排序的键:

push() 生成的唯一键按当前时间排序,因此生成的项目列表将按时间顺序排序。密钥也被设计成不可猜测的(它们包含 72 个随机位的熵)。

push生成一个唯一的密钥,以便多个用户将数据推送到一个位置是安全的。如果这不是问题并且您希望创建一个"2"密钥,您可以这样做,但您不能使用FirebaseListObservable. 您可以使用底层 Firebase API:

firebase.database().ref("/myList/2").set({ "key3": "val3" });

或者您可以使用 AngularFire2 FirebaseObjectObservable

let o = af.database.object("/myList/2");
o.set({ "key3": "val3" });

af你的AngularFire实例在哪里。

执行任一操作后set,您应该会看到您的FirebaseListObservable实例已更新以包含新添加的数据。

于 2016-09-02T23:04:42.443 回答